完全禁用?和 [] 在 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

相關內容