在 bash 的手册页中,非 nameref 参数的间接扩展解释为
如果parameter的第一个字符是感叹号(!),并且parameter不是nameref,则它引入了间接级别。 Bash 将剩余的参数展开后形成的值作为新参数;然后将其扩展,并且该值将用于扩展的其余部分,而不是原始参数的扩展。这称为间接扩展。 该值可以进行波形符扩展、参数扩展、命令替换和算术扩展。
但我无法复制最后一句话。
设置x=y
,y=z
和z=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
该文本可能缺少不是:其值为不是主题...。