首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有extglob的Case语句

带有extglob的Case语句
EN

Stack Overflow用户
提问于 2016-01-20 22:59:49
回答 2查看 958关注 0票数 7

打开extglob后,我想将一个变量与

代码语言:javascript
复制
*( )x*

( regex:/^ *x.*/)

这是:

代码语言:javascript
复制
main(){
  shopt -s extglob
  local line=' x bar'
  case "$line" in
    *( )x*) ;;
    *) ;;
  esac
}
main "$@"

给我一个语法错误。移除shopt -s extglob括号或将main外部移动到外部范围,都解决了这个问题。为什么?为什么shopt -s extglob命令需要在外部?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-21 01:08:54

bash必须解析函数才能创建它,而且由于您使用的扩展glob语法通常是无效的,所以它不能解析函数,除非在创建函数时打开extglob。

Net结果:在声明函数时和运行函数时,extglob都必须处于状态。函数中的shopt -s extglob行处理第二个需求,而不是第一个需求。

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

票数 10
EN

Stack Overflow用户

发布于 2016-01-20 23:14:49

您缺少了in关键字。

代码语言:javascript
复制
case "$var" in
    *( )x*) echo yes;;
esac 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34912289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档