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}"