Halaman Bash man menjelaskan penggunaan ${!a}
untuk mengembalikan konten variabel yang namanya isi a
(tingkat tipuan).
Saya ingin tahu cara mengembalikan semua elemen dalam array menggunakan ini, yaitu,
a=(one two three)
echo ${a[*]}
kembali
one two three
Saya ingin untuk:
b=a
echo ${!b[*]}
untuk mengembalikan yang sama. Sayangnya, tidak, tetapi kembali 0
sebagai gantinya.
Memperbarui
Mengingat jawaban, saya sekarang menyadari bahwa contoh saya terlalu sederhana, karena tentu saja, seperti:
b=("${a[@]}")
Akan mencapai apa yang saya katakan saya butuhkan.
Jadi, inilah yang saya coba lakukan:
LIST_lys=(lys1 lys2)
LIST_diaspar=(diaspar1 diaspar2)
whichone=$1 # 'lys' or 'diaspar'
_LIST=LIST_$whichone
LIST=${!_LIST[*]}
Tentu saja, dengan hati-hati membaca halaman manual Bash menunjukkan bahwa ini tidak akan berfungsi seperti yang diharapkan karena baris terakhir hanya mengembalikan indeks "array" $_LIST
(bukan array sama sekali).
Dalam kasus apa pun, yang berikut harus melakukan pekerjaan (seperti yang ditunjukkan):
LIST=($(eval echo \${$_LIST[*]}))
atau ... (rute yang saya tempuh, pada akhirnya):
LIST_lys="lys1 lys2"
...
LIST=(${!_LIST})
Dengan asumsi, tentu saja, elemen tidak mengandung spasi.
[@]
ke pointer_LIST="LIST_${whichone}[@]"
dan kemudian, gunakanLIST=("${!_LIST}")
untuk menyalin array. Sebaiknya gunakan nama variabel dengan huruf kecil untuk menghindari konflik dengan variabel lingkungan (Semua huruf besar).