启用 \ textglob 后,我希望将变量与
匹配*( )x*
(正则表达式:/^ *x.*/
)
此:
main(){
shopt -s extglob
local line=' x bar'
case "$line" in
*( )x*) ;;
*) ;;
esac
}
main "$@"
给我一个语法错误。删除extglob括号或将shopt -s extglob
移出main
到外部范围,可以解决问题。
为什么?为什么shopt -s extglob
命令需要在外面?
答案 0 :(得分:4)
bash必须解析该函数才能创建它,并且由于你使用的扩展glob语法通常是无效的,所以除非extglob在上,否则它无法解析该函数。功能已创建。
净结果:当函数声明时和运行时,必须同时使用extglob。函数中的shopt -s extglob
行负责第二个要求,但不是第一个要求。
while
或for
循环,bash需要在开始运行之前解析整个循环。因此,如果循环中的某些内容使用了extglob,则必须在循环开始之前启用它。
答案 1 :(得分:1)
您错过了in
关键字。
case "$var" in
*( )x*) echo yes;;
esac