${!FOO}
melakukan substitusi ganda dalam bash
, yang berarti mengambil nilai (string) FOO dan menggunakannya sebagai nama variabel.
zsh
tidak mendukung fitur ini.
Apakah ada cara untuk membuat ini bekerja sama di bash
dan zsh
?
Latar Belakang:
Saya punya daftar variabel lingkungan, seperti
PATH MAIL EDITOR
dan ingin mencetak nama variabel terlebih dahulu dan kemudian nilainya.
Ini berfungsi bash
tetapi tidak zsh
:
for VAR in LIST
do
echo $VAR
echo ${!VAR}
done
Entah bagaimana itu mungkin menjadi "jalan lama" dengan eval
, tetapi saya tidak bisa membuatnya bekerja:
for VAR in LIST
do
echo $VAR
echo `eval \$$VAR`
done
Saya tidak akan pernah mengerti mengapa saya tidak bisa begitu saja melakukan substitusi mendalam seperti ${${VAR}}
atau bahkan ${${${VAR}}}
jika perlu, jadi penjelasan untuk itu juga bagus.
bash
, ia memang memiliki fungsi yang sama (dan lebih banyak lagi), hanya menggunakan pola yang berbeda, yaitu ${(p)FOO}
.
(e)
flag ekspansi parameter zsh telah ditambahkan di zsh-2.6-beta17 (Mei 1996), (P)
flag dalam 3.1.5-pws-7 (1999). bash ada ${!var}
di 2.0 (Desember 1996).