防止 zsh 尝试扩展所有内容

防止 zsh 尝试扩展所有内容

最近从 bash 切换过来,我注意到它zsh会尝试扩展每个看起来包含通配符的命令或参数。因此以下几行不再起作用:

git diff master{,^^}
zsh: no matches found: master^^

scp remote:~/*.txt .
zsh: no matches found: remote:~/*.txt

使上述命令起作用的唯一方法是引用参数,这很烦人。

问:我该如何配置zsh才能继续尝试扩展通配符,但如果没有匹配项,则仅按原样传递参数?

编辑:可能相关:使用 zsh 进行 scp:未找到匹配项

答案1

它是一个故意的zsh 的功能。使用时任何shell 中,将任何被视为元字符的字符引用到 shell 中被视为最佳做法。是用于在设置^选项时否定字符串的模式。是用于匹配零个或多个字符的模式。extendedglob*

您可以通过禁用选项来停止它nomatch。但是这样做,您的未加引号的模式会使您的语句不稳定,具体取决于当前工作目录中可能存在的文件。你不应该这样做。

答案2

有关scp,请参阅https://superuser.com/a/431568

对于git,使用~而不是^

相关内容