Angenommen, ich habe eine Variable var
in Bash. Ich kann ihm einen Wert zuweisen. Zum Beispiel mache ich daraus einen String:
var="Test"
Ich möchte echo
den Namen var
, nicht den Wert von var
. (Ich kann das letztere mit machen echo $var
, aber ich möchte eigentlich das erstere machen.)
Die Antwort auf diese Frage von SO sagt zu verwenden echo ${!var}
, aber wenn ich das tue, gebe ich nur eine leere Zeile zurück. Zum Beispiel dieses Bash-Skript
#!/bin/bash
echo "Hi"
var="Test"
echo ${!var}
echo "Bye"
gibt diese Ausgabe zurück:
Hi
Bye
mit nur einer Leerzeile zwischen Hi und Bye anstelle von var . Was mache ich falsch?
Ich starte Bash 4.1.5 (1) unter Ubuntu 10.04.4 .
echo var
?var=Test; Test=SO; echo ${!var}
Antworten:
Die Shell-Parameter-Erweiterung $ {! Name @} oder $ {! Name *} könnte den Trick machen,
Obwohl machbar, kann ich mir den Nutzen davon nicht vorstellen ...
quelle
foo
nicht definiert, aber definiertfoobar
istfoobar
. Andere Alternativen:var_name=${-+foo}
(oder${foo+foo}
)var_name=$'foo'
,var_name=$"foo"
:-)${!foo@}
wären , foo und foobar, die beide definiert sind, würde der Ausdruck zu auswertenfoo foobar
. Wie die Antwort bemerkt, ist sein Nutzen schwer vorstellbar.Wenn Sie einfach einen statischen Variablennamen ausgeben möchten, können Sie das
$
-Zeichen umgehen:quelle
$var
, aber es ist nutzlos, wenn der Variablenname dynamisch ist. Angenommen, Sie müssen eine Gruppe von Umgebungsvariablen filtern, die mit a beginnenPREFIX_
, aber Sie wissen nichts über die Größe der Gruppe oder die darin enthaltenen Variablennamen. Die akzeptierte Lösung ist für dieses Szenario besser geeignet.