Erweitern Sie indirekt Variablen in der Shell

9

Ich muss indirekt auf eine Variable in der bashShell verweisen .

Ich möchte im Grunde, was Sie tun können, makeindem Sie schreiben $($(var)).

Ich habe versucht, ${$var}die einfachste Lösung zu verwenden, bashaber dann erhalte ich den folgenden Fehler:

bash: ${$var}: bad substitution

Gibt es eine Möglichkeit, dies zu tun?

Was ich versuche zu Iterierte zu tun über alle Argumente ( $1, $2, $3, ...) zu einem Programm einer Iterationsvariable mit und ich kann dies nicht ohne Umweg machen.

wefwefa3
quelle

Antworten:

13

Wenn Sie var1=foound haben foo=bar, können Sie bardurch sagen bekommen ${!var1}. Wenn Sie jedoch die Positionsparameter durchlaufen möchten, ist dies mit ziemlicher Sicherheit besser

for i in "$@"; do
    # something
done
Tom Hunt
quelle
Gibt es eine Möglichkeit, mehrere Indirektionsebenen hinzuzufügen?
Wefwefa3
1
Nicht dass ich es schnell finden könnte. Die offensichtliche Vermutung von ${!!var1}funktioniert nicht. Sie können dies jedoch immer manuell tun, z tmp=${!var1}; echo ${!tmp}.
Tom Hunt
3

Verwenden von /bin/bash:

foo=bar
test=foo
echo ${!test}

# prints -> bar
Nick Grealy
quelle