这是 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。预计其他操作系统上也是如此。
答案1
不,这不是一个错误。你已经证明了
echo '*'
将产生一个文字*
.因此,当您替换此输出时,请按照以下命令
TEST=$(echo '*')
它将放入*
变量中$TEST
。然后当你
echo $TEST
全球将在这里扩张。您可以通过运行最后一个命令,更改目录,然后再次运行来验证这一点。
*
如果你说你会得到输出
echo "$TEST"
正如所解释的这里,双引号允许变量扩展,但阻止全局扩展。