A bash
array tidak bisa menjadi variabel lingkungan karena variabel lingkungan hanya boleh berupa pasangan string nilai kunci.
Anda dapat melakukan seperti yang dilakukan shell dengan $PATH
variabel, yang pada dasarnya adalah larik jalur; ubah larik menjadi string, dibatasi dengan beberapa karakter tertentu yang tidak ada dalam nilai larik:
$ arr=( aa bb cc "some string" )
$ arr=$( printf '%s:' "${arr[@]}" )
$ printf '%s\n' "$arr"
aa:bb:cc:some string:
Atau lebih rapi,
arr=( aa bb cc "some string" )
arr=$( IFS=:; printf '%s' "${arr[*]}" )
export arr
Perluasan ${arr[*]}
akan menjadi elemen dari arr
array dipisahkan oleh karakter pertama dari IFS
, di sini disetel ke :
. Perhatikan bahwa jika melakukannya dengan cara ini, elemen string akan terpisah (tidak dibatasi ) oleh :
, yang berarti Anda tidak akan dapat membedakan elemen kosong di bagian akhir, jika ada.
Alternatif untuk meneruskan nilai ke skrip menggunakan variabel lingkungan adalah (jelas?) menggunakan argumen baris perintah:
arr=( aa bb cc )
./some_script "${arr[@]}"
Skrip kemudian akan mengakses argumen yang diteruskan satu per satu dengan menggunakan parameter posisi $1
, $2
, $3
dll, atau dengan menggunakan [email protected]
:
printf 'First I got "%s"\n' "$1"
printf 'Then I got "%s"\n' "$2"
printf 'Lastly there was "%s"\n' "$3"
for opt in "[email protected]"; do
printf 'I have "%s"\n' "$opt"
done
Array khusus untuk bash. Variabel lingkungan adalah pasangan nama-nilai.
Baca spesifikasi pada variabel lingkungan, yang menyatakan, sebagian:
Nilai variabel lingkungan adalah serangkaian karakter. Untuk program bahasa C, larik string yang disebut lingkungan harus tersedia saat proses dimulai. Array tersebut ditunjuk oleh variabel eksternal environ , yang didefinisikan sebagai:
extern char **environ;
String ini memiliki bentuk name=value; nama tidak boleh mengandung karakter '='.