${!FOO}Führt eine Doppelsubstitution in durch bash, dh, es wird der (Zeichenfolge-) Wert von FOO als Variablenname verwendet.
zshunterstützt diese Funktion nicht.
Gibt es eine Möglichkeit, diese Arbeit in bashund 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 bashaber 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).