2016-01-20 122 views
2

随着extglob上,我要匹配Case语句与extglob

*()x* 

一个变量(在正则表达式:/^ *x.*/

此:

main(){ 
    shopt -s extglob 
    local line=' x bar' 
    case "$line" in 
    *()x*) ;; 
    *) ;; 
    esac 
} 
main "[email protected]" 

是给我一个语法错误。除去extglob圆括号或将main以外的shopt -s extglob移至外部范围,可以解决问题。 为什么?为什么shopt -s extglob命令需要在外面?

回答

2

bash有解析功能,以创建它,因为你使用扩展的水珠语法,通常是无效的,除非extglob是它不能解析功能,当功能创建了

最终结果:extglob在运行时声明为时必须位于两者上。函数中的shopt -s extglob行处理第二个需求,但不是第一个。

顺便说一句,还有一些地方,这可能是一个问题。例如,如果你有一个whilefor循环,bash需要在开始运行之前解析整个循环。因此,如果循环中的某些内容使用extglob,则必须在循环开始之前启用它。

1

您错过了in关键字。

case "$var" in 
    *()x*) echo yes;; 
esac