启用globstar后**/*.md匹配根目录文件的原因咨询
解析:启用globstar后
**/*.md匹配根目录文件的原因 先明确bash里globstar的核心匹配规则:
- 开启
globstar后,**单独使用时,会匹配所有文件、零个或多个目录/子目录; - 当
**后紧跟/(即**/)时,仅匹配目录和子目录,不包含文件。
但你执行的**/*.md不能直接套用**/的规则,要拆分这个模式的匹配逻辑:
**会匹配当前目录(零层级的空路径)、所有子目录及更深层级的目录;- 当
**匹配空路径时,**/*.md就等价于*.md,对应当前目录下的所有.md文件; - 当
**匹配到子目录(比如testfolder/)时,会展开为testfolder/*.md,对应子目录里的文件。
所以最终**/*.md会同时涵盖当前目录和所有子目录下的.md文件,这就是根目录文件被匹配的原因。
而禁用globstar时,**会退化为普通的*匹配规则:仅匹配当前目录下的直接子目录(不会递归,也不匹配当前目录本身),所以**/*.md只会展开为testfolder/*.md,自然只返回子目录里的文件。
再对比你测试的ls **/:**/仅匹配目录,ls命令会列出这些目录下的内容,所以只显示testfolder里的文件,这和文档描述一致。
内容的提问来源于stack exchange,提问作者Atharva Patil
相关产品推荐
相关产品推荐

