${!FOO}melakukan substitusi ganda dalam bash, yang berarti mengambil nilai (string) FOO dan menggunakannya sebagai nama variabel.
zshtidak mendukung fitur ini.
Apakah ada cara untuk membuat ini bekerja sama di bashdan zsh?
Latar Belakang:
Saya punya daftar variabel lingkungan, seperti
PATH MAIL EDITOR
dan ingin mencetak nama variabel terlebih dahulu dan kemudian nilainya.
Ini berfungsi bashtetapi 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).