此代码在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