带有extglob的案例陈述

时间:2016-01-20 22:59:50

标签: bash

启用 \ 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命令需要在外面?

2 个答案:

答案 0 :(得分:4)

bash必须解析该函数​​才能创建它,并且由于你使用的扩展glob语法通常是无效的,所以除非extglob在上,否则它无法解析该函数​​。功能已创建

净结果:当函数声明和运行时,必须同时使用extglob。函数中的shopt -s extglob行负责第二个要求,但不是第一个要求。

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

答案 1 :(得分:1)

您错过了in关键字。

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