![完全禁用?和 [] 在 zsh 中進行通配](https://rvso.com/image/1638102/%E5%AE%8C%E5%85%A8%E7%A6%81%E7%94%A8%EF%BC%9F%E5%92%8C%20%5B%5D%20%E5%9C%A8%20zsh%20%E4%B8%AD%E9%80%B2%E8%A1%8C%E9%80%9A%E9%85%8D.png)
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