请解释为什么最后四个 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 的文件 - 但这是演示该行为的解决方法,而不是修复)。