奇怪的“回声”行为

Gyp*_*aut 2 shell echo

在做一些工作时,我遇到了这个

$ echo [Login]
  g
$ echo [kilo]
  k
$ echo [gauke]
  e g k
$ echo [quasi-star]
  k m q
Run Code Online (Sandbox Code Playgroud)

导致此输出的后台发生了什么?echo [quasi-star]刚刚丢失的输出是介意给出甚至不在那里的信件。

注意:是的,我知道我可以得到我的输出echo "[Login]"

hee*_*ayl 6

如果没有引号,shell 正在对字符类进行路径名(glob)扩展[],因此大概您在当前目录中有名为e, g, k, m,q的文件 - 因此结果。

echo 基本上只是打印路径名扩展的结果,仅此而已。


让我们举一个例子echo [quasi-star]

扩展 for 的结果[quasi-star]将是来自quasijklmnopqrstar(有意保留重复项)的任何单个字符。从 shell 的角度来看,因为没有周围的字符,所以它只会匹配扩展中当前目录上的任何单个字符文件名。