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 的文件——但这是演示行为的解决方法,而不是修复方法)。
| 归档时间: |
|
| 查看次数: |
2332 次 |
| 最近记录: |