使用括号进行模式匹配的bash case语句语法错误

问题描述 投票:0回答:2

此代码在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并且可以正常工作。

bash switch-statement pattern-matching syntax-error
2个回答
0
投票

啊。所以这很尴尬。我几乎在发布此消息后就找到了答案。答案在我问题的链接中。我需要添加:

shopt -s extglob

到脚本的开头。

希望这对以后的人有所帮助。

在此处找到答案:How to use patterns in a case statement?


0
投票

此外,您也可以不必显式使用/设置extglob选项,并使用case语句进行此匹配。如果使用bash,则与test一起使用时,==运算符会提供此匹配项

var="r=x"
if [[ $var == r=?(x|xy|xyz) ]]; then
    printf '%s\n' "success"
fi
© www.soinside.com 2019 - 2024. All rights reserved.