echo [9876543210] 显示 1 4 5 6 ... 为什么?

Mik*_*keD 21 shell bash echo wildcards patterns

请解释为什么最后四个echo语句显示1 4 5 6?我偶然碰到了一次,但我现在很好奇为什么会发生这种行为。

这些语句按预期工作(对我而言)。

$ echo [ 9876543210 ]  
[ 9876543210 ]

$ echo [237890]  
[237890]
Run Code Online (Sandbox Code Playgroud)

这些 echo 语句始终显示 1 4 5 6。这些数字有什么特别之处吗?

$ echo [9876543210]  
1 4 5 6

$ echo [abcd9876543210ghi]  
1 4 5 6

$ echo [-123456-]  
1 4 5 6

$ echo [-7654321-]  
1 4 5 6
Run Code Online (Sandbox Code Playgroud)

谢谢!

  • 可能的重复项是相关且有帮助的,但不是重复项。可能的重复是从rm命令的角度来看的。这个问题是从echo命令的感知“奇怪行为”的角度来看的。两者的基本答案都是通配。搜索echo命令问题的人不会轻易找到rm问题,但更可能会在这里登陆。

Jef*_*ler 35

开括号[是 shell 的一个特殊字符;它打开了一个模式匹配算法,说“匹配括号内的任何字符”。因为当前目录中有 4 个文件分别命名为:1、4、5 和 6,所以当括号内的字符包含这些数字中的任何一个时,shell 会用这些文件名替换模式匹配。当你改用echo [ 9876543210 ]您所呼叫的回声与3个参数:[9876543210,和]

您应该引用 echo 语句的参数,以防止 shell 将其视为模式匹配请求。

$ echo '[9876543210]'
[9876543210]
Run Code Online (Sandbox Code Playgroud)

(或删除名为 1、4、5 和 6 的文件——但这是演示行为的解决方法,而不是修复方法)。