# 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]