Zsh

ZSH 擴展變數在[…[…[ …] 不執行通配

  • March 17, 2022

我在.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 的評論

引用自:https://unix.stackexchange.com/questions/694724