${!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月)。