${!FOO}
içinde bir çift yerine koyma gerçekleştirir bash
, yani FOO'nun (string) değerini alır ve değişken adı olarak kullanır.
zsh
bu özelliği desteklemiyor.
Bu çalışmayı aynı şekilde yapmanın bir yolu var mı bash
ve zsh
?
Arka fon:
Ortam değişkenlerinin bir listesi var.
PATH MAIL EDITOR
önce değişken adlarını sonra da değerlerini yazdırmak istersiniz.
Bu çalışıyor bash
ancak çalışmıyor zsh
:
for VAR in LIST
do
echo $VAR
echo ${!VAR}
done
Bir şekilde “eski yol” ile mümkün olmalı eval
, ama işe yarayamıyorum:
for VAR in LIST
do
echo $VAR
echo `eval \$$VAR`
done
Neden böyle ${${VAR}}
veya ${${${VAR}}}
gerektiğinde bile keyfi olarak derin ikameler yapamayacağımı asla anlamayacağım , bunun için bir açıklama da iyi olurdu.
bash
, gerçekten aynı işleve (ve çok daha fazlasına) sahip, sadece farklı bir desen kullanıyor, yani ${(p)FOO}
.
(e)
parametre genişletme bayrağı zsh-2.6-beta17 (Mayıs 1996), (P)
bayrak 3.1.5-pws-7 (1999) 'da eklendi. bash ${!var}
2.0'da (Aralık 1996).