Ähnlich wie die Antwort von Jesse_b , jedoch unter Verwendung einer Namensreferenzvariablen anstelle einer Variablenumleitung (erfordert bash
4.3+):
$ declare -n var=test
$ test="my string"
$ echo "$var"
my string
Die Namensreferenzvariable var
enthält den Namen der Variablen, auf die sie verweist. Wenn die Variable dereferenziert wird als$var
, wird der Wert dieser anderen Variablen zurückgegeben.
bash
löst Namensreferenzen rekursiv auf:
$ declare -n var1=var2
$ declare -n var2=test
$ test="hello world"
$ echo "$var1"
hello world
Der Vollständigkeit bash
halber ist die Verwendung eines assoziativen Arrays (in 4.0+) auch eine Möglichkeit, dies zu lösen, abhängig von den Anforderungen:
$ declare -A strings
$ strings[test]="my string"
$ var=test
$ echo "${strings[$var]}"
my string
Dies bietet eine flexiblere Möglichkeit, über einen Schlüssel oder Namen, der dynamisch bestimmt werden kann, auf mehr als einen Wert zuzugreifen. Dies ist möglicherweise vorzuziehen, wenn Sie alle Werte einer bestimmten Kategorie in einem einzigen Array erfassen möchten, aber dennoch über einen bestimmten Schlüssel darauf zugreifen können (z. B. über ID zugreifbare Namen oder über Zweck zugreifbare Pfadnamen usw.), da dies nicht zu einer Verschmutzung führt der variable Namespace des Skripts.