${!FOO}
wykonuje podwójne podstawienie w bash
, co oznacza, że pobiera wartość (ciąg) FOO i używa jej jako nazwy zmiennej.
zsh
nie obsługuje tej funkcji.
Czy istnieje sposób, aby to działało tak samo w bash
i zsh
?
Tło:
Mam listę zmiennych środowiskowych, takich jak
PATH MAIL EDITOR
i chcą najpierw wydrukować nazwy zmiennych, a następnie ich wartości.
Działa to, bash
ale nie zsh
:
for VAR in LIST
do
echo $VAR
echo ${!VAR}
done
Powinno to być jakoś możliwe „po staremu” eval
, ale nie mogę zmusić go do działania:
for VAR in LIST
do
echo $VAR
echo `eval \$$VAR`
done
Nigdy nie zrozumiem, dlaczego nie mogę po prostu dokonywać dowolnych głębokich zmian, takich jak, ${${VAR}}
a nawet, ${${${VAR}}}
jeśli zajdzie taka potrzeba, więc wyjaśnienie tego również byłoby miłe.
bash
, to rzeczywiście ma tę samą funkcję (i wiele więcej), używa tylko innego wzorca, a mianowicie ${(p)FOO}
.
(e)
flaga rozszerzenia parametru zsh została dodana w zsh-2.6-beta17 (maj 1996), (P)
flaga w 3.1.5-pws-7 (1999). bash's ${!var}
w wersji 2.0 (grudzień 1996).