打开extglob后,我想将一个变量与
*( )x*( regex:/^ *x.*/)
这是:
main(){
shopt -s extglob
local line=' x bar'
case "$line" in
*( )x*) ;;
*) ;;
esac
}
main "$@"给我一个语法错误。移除shopt -s extglob括号或将main外部移动到外部范围,都解决了这个问题。为什么?为什么shopt -s extglob命令需要在外部?
发布于 2016-01-21 01:08:54
bash必须解析函数才能创建它,而且由于您使用的扩展glob语法通常是无效的,所以它不能解析函数,除非在创建函数时打开extglob。
Net结果:在声明函数时和运行函数时,extglob都必须处于状态。函数中的shopt -s extglob行处理第二个需求,而不是第一个需求。
顺便说一句,还有其他一些地方可能会出现问题。例如,如果您有一个while或for循环,那么bash需要在开始运行它之前解析整个循环。因此,如果循环中的某些内容使用extglob,则必须在循环开始之前启用它。
发布于 2016-01-20 23:14:49
您缺少了in关键字。
case "$var" in
*( )x*) echo yes;;
esac https://stackoverflow.com/questions/34912289
复制相似问题