为什么 bash/echo 使用括号时会出现奇怪的情况?可能是 bug

为什么 bash/echo 使用括号时会出现奇怪的情况?可能是 bug
# ls -l
insgesamt 0
# echo [a]
[a]
# > a
# echo [a]
a          

情况已经改变,不再有括号,因为存在文件“a”......为什么???

答案1

不,这不是错误。事实上,这是预期的结果。

中某些字符具有特殊含义bash[]是示例,但*是另一个。 它们用于扩展。[]用于 '两个括号之间的任何字符。 因此,也[abcd]将匹配a。 如果扩展失败,则字符串将按原样显示为命令的参数,在您的例子中是echo

在空目录中,[a]无法展开,因此将其未修改地作为 的参数传递给echo。当您a使用创建 时>a,扩展现在成功,因此参数是扩展的结果。

因此,您现在应该能够理解以下序列:

$ ls -l
total 0
$ echo me*
me*
$ touch me
$ echo me*
me
$ echo [a]
[a]
$ echo [abcd]
[abcd]
$ >a
$ ls -l 
total 0
-rw-rw-r-- 1 ljm ljm 0 May 31 18:40 a
-rw-rw-r-- 1 ljm ljm 0 May 31 18:39 me
$ echo [abcd]
a
$ echo [b]
[b]

相关内容