You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Bash与Zsh的路径扩展(**/*.xml)结果存在差异?

Bash与Zsh中echo ./**/*.xml路径扩展结果不同的原因

这个差异完全是Bash和Zsh对**通配符的默认处理逻辑不一样导致的,具体细节可以拆成两点来看:

  • Bash的默认行为有两个限制
    默认状态下,Bash对**通配符的处理比较保守:

    1. 它只会匹配一级子目录里的文件,不会深入到更深层级的嵌套子目录(比如xl/theme/、xl/worksheets/这种二级目录就被直接忽略了);
    2. 它不会把当前目录纳入**的匹配范围,所以根目录下的[Content_Types].xml也没被包含进来。

    要是想让Bash实现和Zsh一样的效果,只需要开启它的globstar选项就行:

    shopt -s globstar
    

    开启后,**就会支持深度递归匹配所有层级的子目录,同时也会包含当前目录,再执行echo ./**/*.xml就能得到和Zsh完全一样的输出了。

  • Zsh的默认规则更宽松
    Zsh从设计上就把**当成了全递归通配符来用:

    1. 它会自动遍历当前目录下所有层级的子目录,不管嵌套多深都能找到对应的文件;
    2. 它默认会把当前目录纳入**的匹配范围,所以根目录下的[Content_Types].xml也能被匹配到。
      这就是为什么Zsh能一次性输出所有XML文件的原因。

内容的提问来源于stack exchange,提问作者Run

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:44:03