这是一个 Bash 错误吗?
$ mkdir test && cd test && echo "a" > "some.file"
test$ echo '*'
*
test$ TEST=$(echo '*')
test$ echo $TEST
some.file
为什么第二个输出解析*
为(所有)文件名,而不仅仅是文字*
输出?看起来像 Bash 中的错误?
在 Ubuntu 18.04、bash 版本 4.4.19(1)-release 上尝试过。期望它在其他操作系统上会是一样的。
不,这不是错误。你已经证明了
将产生一个文字
*
. 因此,当您替换此输出时,按照以下命令它将放入
*
变量$TEST
中。那么当你glob 将在这里扩展。您可以通过运行最后一个命令、更改目录然后再次运行来验证这一点。
如果你说,你会得到
*
输出如此处所解释的,双引号允许扩展变量,但防止全局扩展。