${!FOO}wykonuje podwójne podstawienie w bash, co oznacza, że pobiera wartość (ciąg) FOO i używa jej jako nazwy zmiennej.
zshnie obsługuje tej funkcji.
Czy istnieje sposób, aby to działało tak samo w bashi 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, bashale 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).