Expandir indirectamente variables en shell

9

Necesito hacer referencia indirecta a una variable en el bashshell.

Básicamente quiero saber qué puedes hacer makeescribiendo $($(var)).

He intentado usar ${$var}cuál sería la solución más sencilla, bashpero luego aparece este error:

bash: ${$var}: bad substitution

¿Hay alguna forma de hacer esto?

Lo que estoy tratando de hacer es iterar sobre todos los argumentos ( $1, $2, $3, ...) a un programa usando una variable de iteración y no puedo hacer esto sin direccionamiento indirecto.

wefwefa3
fuente

Respuestas:

13

Si tiene var1=fooy foo=bar, puede obtener bardiciendo ${!var1}. Sin embargo, si desea iterar sobre los parámetros posicionales, es casi seguro que sea mejor hacerlo

for i in "$@"; do
    # something
done
Tom Hunt
fuente
¿Hay alguna manera de agregar múltiples niveles de indirección?
wefwefa3
1
No es que pueda encontrarlo rápidamente. La suposición obvia de ${!!var1}no funciona. Sin embargo, siempre puede hacerlo manualmente, por ejemplo tmp=${!var1}; echo ${!tmp}.
Tom Hunt
3

Utilizando /bin/bash:

foo=bar
test=foo
echo ${!test}

# prints -> bar
Nick Grealy
fuente