此代码在GNU bash版本5.0.7(1)-发行版(x86_64-redhat-linux-gnu)上运行:
var="r=x"
case "$var" in
r=?(x|xy|xyz))
echo "suchess"
;;
esac
正在生成此错误:
bash: test.sh: line 3: syntax error near unexpected token `('
bash: test.sh: line 3: ` r=?(x|xy|xyz))'
无法终生了解,为什么...经过测试的代码找到了here并且可以正常工作。
啊。所以这很尴尬。我几乎在发布此消息后就找到了答案。答案在我问题的链接中。我需要添加:
shopt -s extglob
到脚本的开头。
希望这对以后的人有所帮助。
此外,您也可以不必显式使用/设置extglob
选项,并使用case
语句进行此匹配。如果使用bash
,则与test
一起使用时,==
运算符会提供此匹配项
var="r=x" if [[ $var == r=?(x|xy|xyz) ]]; then printf '%s\n' "success" fi
请确保您不要在
==
运算符的右侧引用全局模式。可以在上面使用它,也可以进行变量赋值来存储glob并进行无引号的比较
glob="r=?(x|xy|xyz)"
if [[ $var == $glob ]]; then