Zsh
ZSH 擴展變數在[…[…[ …] 不執行通配
我在.zshrc 中設置了extended_glob。
這按預期工作:
[[ "value" = [a-z]* ]] && echo "globbed"
列印“全域”。
但這不會:
foo=[a-z]* [[ "value" = $foo ]] && echo "globbed"
不列印任何東西。
為什麼會這樣,我需要在 .zshrc 中設置什麼(如果有的話)以使其發揮作用?
從
zsh
手冊(我強調):
${~spec}
打開
GLOB_SUBST
評估的選項spec
;如果~
加倍,則將其關閉。設置此選項時,擴展產生的字元串將在任何可能的地方解釋為模式,例如在文件名擴展和文件名生成以及模式匹配上下文中,如條件中的和運算符的右側=``!=
。這意味著您應該使用
foo='[a-z]*' [[ "value" = ${~foo} ]] && echo 'matched'
…明確允許將變數
foo
中的字元串用作模式。
matched
如果字元串value
與儲存在變數中的模式匹配,上面的程式碼就會列印出來foo
。請注意,此處不涉及文件名通配。另見下方 Stéphane 的評論。