[[ ... ]] 中的 ZSH 扩展变量不执行通配

[[ ... ]] 中的 ZSH 扩展变量不执行通配

我在.zshrc 中设置了extend_glob。

这按预期工作:

[[ "value" = [a-z]* ]] && echo "globbed"

打印“globbed”。

但这并不:

foo=[a-z]*
[[ "value" = $foo ]] && echo "globbed"

不打印任何东西。
这是为什么?我需要在 .zshrc 中设置什么(如果有的话)才能使其发挥作用?

答案1

zsh手册中(我强调):

${~spec}
打开GLOB_SUBST评估选项spec;如果 ~加倍,请将其关闭。当设置此选项时,扩展产生的字符串将被解释为模式任何可能的地方,例如文件名扩展和文件名生成和模式匹配上下文,例如条件中=and运算符的右侧!=

这意味着您应该使用

foo='[a-z]*'
[[ "value" = ${~foo} ]] && echo 'matched'

...显式允许变量中的字符串foo用作模式。

上面的代码将打印matched字符串是否与value变量中存储的模式匹配foo。请注意,此处不涉及文件名通配。也可以看看以下来自 Stéphane 的评论

相关内容