${!FOO}在中执行双重替换bash,这意味着它接受FOO的(字符串)值并将其用作变量名。
zsh不支持此功能。
有没有一种方法,使这项工作同样在bash和zsh?
背景:
我有一个环境变量列表,例如
PATH MAIL EDITOR
并想先打印变量名,然后再打印它们的值。
这适用于bash但不适用zsh:
for VAR in LIST
do
echo $VAR
echo ${!VAR}
done
应该可以通过某种方式实现“旧方法” eval,但是我无法使其正常工作:
for VAR in LIST
do
echo $VAR
echo `eval \$$VAR`
done
我永远也不会理解为什么我不能简单地进行像${${VAR}}或什至${${${VAR}}}需要这样的任意深度替换,因此对此做一个解释也很好。
bash,它确实具有相同的功能(还有更多功能),仅使用不同的模式,即${(p)FOO}。
(e)参数扩展标志已添加到zsh-2.6-beta17(1996年5月)中,该(P)标志已添加到3.1.5-pws-7(1999年)中。bash的${!var}2.0版本(1996年12月)。