在 zsh 中完全禁用 ? 和 [] 通配符

在 zsh 中完全禁用 ? 和 [] 通配符

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

相关内容