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.

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

¿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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.