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.

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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.