${!FOO}
Führt eine Doppelsubstitution in durch bash
, dh, es wird der (Zeichenfolge-) Wert von FOO als Variablenname verwendet.
zsh
unterstützt diese Funktion nicht.
Gibt es eine Möglichkeit, diese Arbeit in bash
und gleich zu machen zsh
?
Hintergrund:
Ich habe eine Liste von Umgebungsvariablen, wie
PATH MAIL EDITOR
und wollen zuerst die Variablennamen und danach ihre Werte drucken.
Das funktioniert in bash
aber nicht zsh
:
for VAR in LIST
do
echo $VAR
echo ${!VAR}
done
Es sollte irgendwie "auf die alte Art" möglich sein eval
, aber ich kann es nicht zum Laufen bringen:
for VAR in LIST
do
echo $VAR
echo `eval \$$VAR`
done
Ich werde nie verstehen, warum ich nicht einfach willkürliche tiefe Substitutionen wie ${${VAR}}
oder sogar ${${${VAR}}}
wenn nötig durchführen kann, daher wäre auch eine Erklärung dafür nett.
bash
, es hat in der Tat die gleiche Funktion (und vieles mehr), es wird nur ein anderes Muster verwendet, nämlich ${(p)FOO}
.
(e)
Parametererweiterungsflag von zsh wurde in zsh-2.6-beta17 (Mai 1996) hinzugefügt, das (P)
Flag in 3.1.5-pws-7 (1999). Bash ${!var}
in 2.0 (Dezember 1996).