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.