GNU/Linux >> LINUX-Kenntnisse >  >> Linux

${!foo} Und Zsh?

${!FOO} führt eine doppelte Substitution in bash durch , was bedeutet, dass es den (String-)Wert von FOO nimmt und als Variablennamen verwendet.
zsh unterstützt diese Funktion nicht.

Gibt es eine Möglichkeit, dass dies in bash genauso funktioniert und zsh ?

Hintergrund:

Ich habe eine Liste mit Umgebungsvariablen wie

PATH MAIL EDITOR

und zuerst die Variablennamen und danach deren Werte ausdrucken wollen.

Dies funktioniert in bash aber nicht zsh :

for VAR in LIST
do
        echo $VAR
        echo ${!VAR}
done

Es sollte irgendwie „auf die alte Art“ mit eval möglich sein , 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 beliebige tiefe Ersetzungen wie ${${VAR}} vornehmen kann oder sogar ${${${VAR}}} notfalls wäre eine Erklärung dafür auch nett.

Akzeptierte Antwort:

Sowohl bash als auch zsh haben eine Möglichkeit, eine indirekte Erweiterung durchzuführen, aber sie verwenden eine andere Syntax.

Es ist einfach genug, eine indirekte Erweiterung mit eval durchzuführen; dies funktioniert in allen POSIX- und den meisten Bourne-Shells. Achten Sie darauf, richtig zu zitieren, falls der Wert Zeichen enthält, die in der Shell eine besondere Bedeutung haben.

eval "value="${$VAR}""
echo "$VAR"
echo "$value"

${${VAR}} funktioniert nicht, weil es kein Feature ist, das irgendeine Shell implementiert. Das Ding innerhalb der geschweiften Klammern muss den Syntaxregeln entsprechen, die ${VAR} nicht enthalten . (In zsh ist dies eine unterstützte Syntax, macht aber etwas anderes:verschachtelte Ersetzungen führen aufeinanderfolgende Transformationen für denselben Wert durch; ${${VAR}} entspricht $VAR da dies die Identitätstransformation zweimal für den Wert durchführt.)


Linux
  1. Slash und Backslash in Sed?

  2. Jedem Element von $* in der Shell eine Zeichenfolge voranstellen und anhängen?

  3. Shell-Skript mit Funktion und Parameter als Variablen?

  4. Dateiinhalt kodieren und als eine Zeile wiedergeben?

  5. Grundlegende Division mit Variable und Ganzzahl?

So richten Sie ZSH und Oh-my-zsh unter Linux ein

So installieren und verwenden Sie die ZSH-Shell unter Linux

So installieren und konfigurieren Sie Zsh in Ubuntu 20.04

16 Praktische und nützliche Beispiele für Echo Command unter Linux

Installieren Sie das Awesome Zsh und machen Sie es zur Standard-Shell

So installieren und konfigurieren Sie ZSH auf Linux-Distributionen