`.[].foo[]` 在 bash 中有什么作用?为什么它匹配`..`?

Jon*_*fer 16 shell bash wildcards

请看以下内容:

$ echo .[].aliases[]
..
$ echo .[].foo[]
..
$ echo .[].[]
..
$ echo .[].xyz[]
..
$ echo .xyz[].xyz[]
.xyz[].xyz[]
$ echo .xyz[].[]
.xyz[].[]
Run Code Online (Sandbox Code Playgroud)

显然,这似乎是一团糟,但我不明白结果是如何结合在一起的。据我了解[]是一个空字符类。如果这将是直观的

  • 它只匹配空字符串;在这种情况下,我希望 bash 能够完整地重现,因为在这个目录中没有匹配它,但也匹配..aliases(在第一个例子中),
  • 或者什么都没有;在这种情况下,我希望 bash 也能重现整个字符串。

这是 GNU bash 版本 4.4.23(1)-release。

Ral*_*edl 26

[开始一组。集合以 结束]。但是有一种方法可以将其]作为集合的一部分,那就是将 指定]为第一个字符。由于空集没有任何意义,因此这并不含糊。

所以你的例子基本上都是一个点,然后是一个包含一个点的集合,因此它匹配两个点。

后面的示例没有找到任何文件,因此逐字返回。