Similar a la respuesta de Jesse_b , pero usando una variable de referencia de nombre en lugar de indirecta variable (requiere bash
4.3+):
$ declare -n var=test
$ test="my string"
$ echo "$var"
my string
La variable de referencia de nombre var
contiene el nombre de la variable a la que hace referencia. Cuando la variable se desreferencia como $var
, se devuelve el valor de esa otra variable.
bash
resuelve referencias de nombre de forma recursiva:
$ declare -n var1=var2
$ declare -n var2=test
$ test="hello world"
$ echo "$var1"
hello world
Para completar, usar una matriz asociativa (en bash
4.0+) también es una forma de resolver esto, dependiendo de los requisitos:
$ declare -A strings
$ strings[test]="my string"
$ var=test
$ echo "${strings[$var]}"
my string
Esto proporciona una forma más flexible de acceder a más de un valor por una clave o nombre que puede determinarse dinámicamente. Esto puede ser preferible si desea recopilar todos los valores de una categoría particular en una sola matriz, pero aún así puede acceder a ellos mediante alguna clave (por ejemplo, nombres accesibles por ID o nombres de ruta accesibles por propósito, etc.) ya que no contamina El espacio de nombres variable del script.