${!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.
zshno es compatible con esta función.
¿Hay alguna manera de hacer que esto funcione igual en bashy 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 bashpero 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).