嵌套参数扩展未按预期工作

Nested parameter expansion not working as expected

zsh 说:

${name}

The value, if any, of the parameter name is substituted.

然后还说:

If a ${...} type parameter expression or a $(...) type command substitution is used in place of name above, it is expanded first and the result is used as if it were the value of name.

我的问题是,假设我理解正确,即变量名可以嵌套,那么为什么以下内容不起作用?

echo $ab $fooz           
foo 123
echo "${${ab}z}"         
zsh: bad substitution
Expected:
123

您希望 echo "${${ab}z}" 做什么?我相信您希望它评估 ${ab} 然后附加文字 z 然后将整个事物解释为变量名,从而以 123.

结尾

这是您想要的结果,其中一些步骤向我们展示了如何实现:

$ ab=foo fooz=123
$ echo $ab $fooz
foo 123
$ echo ${(P)ab}

$ echo ${(P)ab}z
z
$ echo ${${(P)ab}z}
123

(Bash 可以做 ${!ab} 但不能嵌套做最后一步。POSIX 不能做任何类似的事情。)

这使用 Zsh 的 parameter expansion P flag