防止 zsh 尝试扩展所有内容

Att*_* O. 7 zsh command-line

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

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

scp remote:~/*.txt .
zsh: no matches found: remote:~/*.txt
Run Code Online (Sandbox Code Playgroud)

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

问:如何配置zsh仍然尝试扩展通配符,但如果没有匹配项,则按原样传递参数?

编辑:可能相关:scp 与 zsh :未找到匹配项

小智 7

这是zsh的预期功能。在使用任何shell 时,最好的做法是引用任何被认为是 shell 的元字符的字符。^是用于在extendedglob设置选项时否定字符串的模式。*是用于匹配零个或多个字符的模式。

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