${!FOO}
realiza una doble sustitución en bash
, lo que significa que toma el valor (cadena) de FOO y lo usa como un nombre de variable.
zsh
no es compatible con esta función.
¿Hay alguna manera de hacer que esto funcione igual en bash
y zsh
?
Antecedentes:
Tengo una lista de variables de entorno, como
PATH MAIL EDITOR
y desea imprimir primero los nombres de las variables y luego sus valores.
Esto funciona bash
pero no en zsh
:
for VAR in LIST
do
echo $VAR
echo ${!VAR}
done
De alguna manera debería ser posible "a la antigua usanza" eval
, pero no puedo hacer que funcione:
for VAR in LIST
do
echo $VAR
echo `eval \$$VAR`
done
Nunca voy a entender por qué no puedo simplemente hacer sustituciones profundas arbitrarias como ${${VAR}}
o incluso ${${${VAR}}}
si es necesario, por lo que una explicación para eso también sería agradable.
bash
, de hecho tiene la misma función (y mucho más), solo usa un patrón diferente, a saber ${(p)FOO}
.
(e)
indicador de expansión de parámetros de zsh se agregó en zsh-2.6-beta17 (mayo de 1996), el (P)
indicador en 3.1.5-pws-7 (1999). bash ${!var}
en 2.0 (diciembre de 1996).