zsh说:
${name}
替换参数名称的值(如果有)。
然后它还说:
如果使用 ${...} 类型参数表达式或 $(...) 类型命令替换代替上面的 name,则首先扩展它,并将结果用作 name 的值。
我的问题是为什么以下内容不起作用,假设我理解正确,即变量名可以嵌套?
echo $ab $fooz
foo 123
echo "${${ab}z}"
zsh: bad substitution
Expected:
123
zsh说:
${name}
替换参数名称的值(如果有)。
然后它还说:
如果使用 ${...} 类型参数表达式或 $(...) 类型命令替换代替上面的 name,则首先扩展它,并将结果用作 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 的参数扩展P
标志。