嵌套参数扩展未按预期工作
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。
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。