间接扩展扩展了什么值?

间接扩展扩展了什么值?

在 bash 的手册页中,非 nameref 参数的间接扩展解释为

如果parameter的第一个字符是感叹号(!),并且parameter不是nameref,则它引入了间接级别。 Bash 将剩余的参数展开后形成的值作为新参数;然后将其扩展,并且该值将用于扩展的其余部分,而不是原始参数的扩展。这称为间接扩展。 该值可以进行波形符扩展、参数扩展、命令替换和算术扩展。

但我无法复制最后一句话。

设置x=y,y=zz=end.结果正如预期的那样。

$ echo ${!x}
z

设置x=y,y='$z'z=end.

$ echo ${!x}
$z

设置x='$y'y=z、 和z=end

$ echo ${!x}
-bash: $y: invalid variable name

那么,文档中上面提到的扩展的主题是什么值?我缺少什么?

(使用的 Bash 版本是 5.1.0(1)-release (x86_64-redhat-linux-gnu))。

答案1

这听起来像是一个文档错误。这引入该文本的提交相反的方向:

CWRU/CWRU.log引用源发行版中的相关补充:

+                                  12/18
+                                  -----
+subst.c
+       - parameter_brace_find_indir: when expanding the indirect parameter
+         to find the eventual variable name, we don't perform word splitting.
+         Make sure this does the right thing for * and @.  Fixes bug
+         reported by isabella parakiss <[email protected]>
+
+                                  12/19
+                                  -----
+doc/{bash.1,bashref.texi}
+       - indirect expansion: make sure to note that the value of the indirect
+         variable does not undergo word splitting as one of its expansions,
+         as in fix from 12/18

该文本可能缺少不是其值为不是主题...

相关内容