我在.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 的评论。