toni rmc Asked: 2022-03-17 20:11:49 +0800 CST2022-03-17 20:11:49 +0800 CST 2022-03-17 20:11:49 +0800 CST [[ ... ]] 中的 ZSH 扩展变量不执行通配 772 我在.zshrc 中设置了extended_glob。 这按预期工作: [[ "value" = [a-z]* ]] && echo "globbed" 打印“全局”。 但这不会: foo=[a-z]* [[ "value" = $foo ]] && echo "globbed" 不打印任何东西。 为什么会这样,我需要在 .zshrc 中设置什么(如果有的话)以使其发挥作用? zsh wildcards 1 个回答 Voted Best Answer they 2022-03-17T23:49:48+08:002022-03-17T23:49:48+08:00 从zsh手册(我强调): ${~spec} 打开GLOB_SUBST评估的选项spec;如果 ~加倍,则将其关闭。设置此选项时,扩展产生的字符串将在任何可能的地方解释为模式,例如在文件名扩展和文件名生成以及模式匹配上下文中,如条件中的和运算符的右侧=!=。 这意味着您应该使用 foo='[a-z]*' [[ "value" = ${~foo} ]] && echo 'matched' ...明确允许将变量foo中的字符串用作模式。 matched如果字符串value与存储在变量中的模式匹配,上面的代码就会打印出来foo。请注意,此处不涉及文件名通配。另见下方 Stéphane 的评论。
从
zsh
手册(我强调):这意味着您应该使用
...明确允许将变量
foo
中的字符串用作模式。matched
如果字符串value
与存储在变量中的模式匹配,上面的代码就会打印出来foo
。请注意,此处不涉及文件名通配。另见下方 Stéphane 的评论。