最近从 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
,使用~
而不是^
。