Wie kann ich in Bash den Variablennamen und nicht den Variablenwert wiedergeben? [geschlossen]


18

Angenommen, ich habe eine Variable varin Bash. Ich kann ihm einen Wert zuweisen. Zum Beispiel mache ich daraus einen String:

var="Test"

Ich möchte echoden 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 .


11
Äh ... nur echo var?
Braiam

5
Ich verstehe den Punkt nicht wirklich. Wie @Braiam hervorhebt, werden Sie den Namen der Variablen immer kennen und immer in der Lage sein, ihn zu drucken, da Sie ihn zuerst definieren. Was versuchst du eigentlich zu tun?
terdon

3
Ich denke, Sie haben die Drift der SO-Lösung verpasst. tryvar=Test; Test=SO; echo ${!var}
iruvar

Ich verstehe es auch nicht, aber was versuchst du zu tun? echo '$ var'
Renan Vicente

Ich bin sehr gespannt, bitte sagen Sie uns, wofür Sie das gebraucht haben!
Bubakazouba

Antworten:


22

Die Shell-Parameter-Erweiterung $ {! Name @} oder $ {! Name *} könnte den Trick machen,

$ foo=bar
$ var_name=(${!foo@})
$ echo $var_name" = "$foo
foo = bar

Obwohl machbar, kann ich mir den Nutzen davon nicht vorstellen ...


2
Beachten Sie, dass Sie erhalten, wenn foonicht definiert, aber definiert foobarist foobar. Andere Alternativen: var_name=${-+foo}(oder ${foo+foo}) var_name=$'foo', var_name=$"foo":-)
Stéphane Chazelas

1
Wenn zwei Variablen sichtbar ${!foo@}wären , foo und foobar, die beide definiert sind, würde der Ausdruck zu auswerten foo foobar. Wie die Antwort bemerkt, ist sein Nutzen schwer vorstellbar.
CppNoob

29

Wenn Sie einfach einen statischen Variablennamen ausgeben möchten, können Sie das $-Zeichen umgehen:

echo \$var

3
Dies sollte die akzeptierte Lösung sein.
David Poxon

9
Nicht im geringsten!! Diese Antwort ist keine gute Lösung. Dies wird einfach ausgegeben $var, aber es ist nutzlos, wenn der Variablenname dynamisch ist. Angenommen, Sie müssen eine Gruppe von Umgebungsvariablen filtern, die mit a beginnen PREFIX_, 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.
Héctor Valverde Pareja

aka var_name = "$ (echo \ $ var)"
Yordan Georgiev
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.