Ähnlich wie die Antwort von Jesse_b , jedoch unter Verwendung einer Namensreferenzvariablen anstelle einer Variablenumleitung (erfordert bash4.3+):
$ declare -n var=test
$ test="my string"
$ echo "$var"
my string
Die Namensreferenzvariable varenthä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 bashhalber 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.