2

zsh说:

${name}

替换参数名称的值(如果有)。

然后它还说:

如果使用 ${...} 类型参数表达式或 $(...) 类型命令替换代替上面的 name,则首先扩展它,并将结果用作 name 的值。

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

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

1 回答 1

2

你期望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标志

于 2019-07-28T15:52:14.177 回答