`echo $TEST` 在变量中扩展星号是一个错误吗?

`echo $TEST` 在变量中扩展星号是一个错误吗?

这是 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"

正如所解释的这里,双引号允许变量扩展,但阻止全局扩展。

相关内容