在做一些工作时,我遇到了这个
$ echo [Login]
g
$ echo [kilo]
k
$ echo [gauke]
e g k
$ echo [quasi-star]
k m q
后台发生了什么导致此输出?输出echo [quasi-star]
只是失去了理智,给出了根本不存在的字母。
笔记:是的,我知道我可以得到我的输出echo "[Login]"
答案1
如果没有引号,shell 将对字符类 进行路径名(glob)扩展[]
,因此可能在当前目录中有名为e
, g
, k
, m
,的文件q
- 这就是结果。
echo
基本上只是打印路径名扩展的结果,仅此而已。
让我们举一个例子echo [quasi-star]
:
for 的扩展结果[quasi-star]
将是 from 的任何单个字符quasijklmnopqrstar
(有意保留重复项)。从 shell 的角度来看,由于没有周围的字符,因此它只会匹配扩展中当前目录上的任何单个字符文件名。