Bash – variables variables

Tengo la variable $foo="something" y me gustaría usar:

 bar="foo"; echo $($bar) 

para obtener “algo” eco.

En bash, puede usar $ {! Variable} para usar variables variables.

 foo="something" bar="foo" echo "${!bar}" 

La respuesta aceptada es genial. Sin embargo, @Edison preguntó cómo hacer lo mismo para las matrices. El truco es que quieres que tu variable contenga el “[@]”, de modo que la matriz se expanda con el “!”. Echa un vistazo a esta función para volcar variables:

 $ function dump_variables() { for var in "$@"; do echo "$var=${!var}" done } $ STRING="Hello World" $ ARRAY=("ab" "cd") $ dump_variables STRING ARRAY ARRAY[@] 

Esto produce:

 STRING=Hello World ARRAY=ab ARRAY[@]=ab cd 

Cuando se presenta como solo ARRAY , se muestra el primer elemento, ¡y eso es lo que expande ! . Al dar el formato ARRAY[@] , obtienes la matriz y todos sus valores se expanden.

eval echo \"\$$bar\" lo haría.

Para que quede más claro cómo hacerlo con matrices:

 arr=( 'a' 'b' 'c' ) # construct a var assigning the string representation # of the variable (array) as its value: var=arr[@] echo "${!var}"