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

Does double asterisk include the current directory?

下面的问题问What do double-asterisk (**) wildcards mean?

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

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

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

$ ls -d **/*.md
docs/architecture.md
docs/autodetect.md
# ...

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

$ ls -d *.md
CODE_OF_CONDUCT.md  CONTRIBUTING.md  README.md  SECURITY.md

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

如何确定脚本中的命令对当前目录和子目录中的文件都起作用?

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

When the globstar shell option is enabled, and * is used in a filename expansion context, two adjacent *s used as a single pattern will match all files and zero or more directories and subdirectories. If followed by a /, two adjacent *s will match only directories and subdirectories.

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

$ ls **/*.md
docs/architecture.md  docs/autodetect.md

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

$ shopt -s globstar
$ ls **/*.md
CODE_OF_CONDUCT.md  CONTRIBUTING.md  README.md  SECURITY.md  docs/architecture.md  docs/autodetect.md