双星号是否包含当前目录?

Tob*_*oby 6 bash glob

以下问题询问双星号 (**) 通配符是什么意思?

那里的许多答案表明**包括当前目录以及子目录。

但是,当我在 bash 控制台中测试它时,它似乎只列出子目录中的文件。以下都只列出子目录文件

$ find **/*.md
docs/architecture.md
docs/autodetect.md
# ...

$ ls -d **/*.md
docs/architecture.md
docs/autodetect.md
# ...
Run Code Online (Sandbox Code Playgroud)

尽管当前目录中有.md文件

$ ls -d *.md
CODE_OF_CONDUCT.md  CONTRIBUTING.md  README.md  SECURITY.md
Run Code Online (Sandbox Code Playgroud)

我是否误解了所引用问题的答案,或者我是否错误地测试了模式?

如何确定脚本中的命令对当前目录和子目录中的文件进行操作?

Joh*_*ica 5

globstar需要打开该选项才能启用 的特殊解释**/。否则,它只是*连续的两个 glob,与当前目录不匹配。

globstar启用 shell 选项并*在文件名扩展上下文中使用时,*用作单个模式的两个相邻 s 将匹配所有文件以及零个或多个目录和子目录。如果后跟 a /,则两个相邻的*s 将仅匹配目录和子目录。

这是默认行为 ( shopt -u globstar):

$ ls **/*.md
docs/architecture.md  docs/autodetect.md
Run Code Online (Sandbox Code Playgroud)

这是设置 ( shopt -s globstar) 后得到的结果:

$ shopt -s globstar
$ ls **/*.md
CODE_OF_CONDUCT.md  CONTRIBUTING.md  README.md  SECURITY.md  docs/architecture.md  docs/autodetect.md
Run Code Online (Sandbox Code Playgroud)