zsh 在 bash 的基础上添加了一些额外的通配符逻辑:
$ zsh
$ echo foo[]
zsh: no matches found: foo[]
$ echo bar?
zsh: no matches found: bar?
$ bash
$ echo f[]
f[]
$ echo bar?
bar?
这些对我来说都没用,而且复制/输入 URL 和其他内容很烦人。
我想完全禁用此功能,但我还没有找到任何方法可以做到这一点。
有几个不完善的解决方案:
setopt NO_NOMATCH
这基本上是有效的,除非你的 glob 不小心做匹配,例如:
$ echo README.m?
README.md
- 添加引号
这有效,但不适用于在线复制粘贴片段,并且增加了我在打字时需要记住的额外步骤。
- 使用
url-quote-magic
自动退出
这会污染 CLI/历史记录,并且仅适用于粘贴
答案1
?
在 Bash 中也是一个通配符。您看到的差异是因为在 Zsh 中,匹配失败会导致错误,而在 Bash 中,匹配失败会被默默忽略。
要在 Zsh 中获取 Bash 行为,请将其添加到您的~/.zshrc
文件中:
unsetopt NOMATCH
不过我其实建议不是将其关闭。默默忽略错误并不是一件好事,在执行破坏性操作时甚至会很危险。
有关此 shell 选项的更多信息,请参阅http://zsh.sourceforge.net/Doc/Release/Options.html