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

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

请解释为什么最后四个 echo 语句显示 1 4 5 6?我曾经偶然遇到过这个问题,但我现在很好奇为什么会发生这种行为。

这些语句按预期工作(对我来说)。

$ echo [ 9876543210 ]  
[ 9876543210 ]

$ echo [237890]  
[237890]

这些 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

谢谢!

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

答案1

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

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

$ echo '[9876543210]'
[9876543210]

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

相关内容