使用extglob,我想匹配一个变量
*( )x*
Run Code Online (Sandbox Code Playgroud)
(在正则表达式:/^ *x.*/)
这个:
main(){
shopt -s extglob
local line=' x bar'
case "$line" in
*( )x*) ;;
*) ;;
esac
}
main "$@"
Run Code Online (Sandbox Code Playgroud)
给我一个语法错误。要么除去extglob括号或移动shopt -s extglob之外main,到外范围,解决了这个问题。为什么?为什么shopt -s extglob命令需要在外面?
bash 必须解析函数才能创建它,并且由于您使用的扩展 glob 语法通常是无效的,因此它无法解析该函数,除非在创建函数时extglob 处于打开状态。
最终结果:extglob 必须在函数声明和运行时都打开。shopt -s extglob函数中的行处理第二个要求,但不是第一个。
顺便说一句,还有其他一些地方可能会出现问题。例如,如果您有一个whileorfor循环,bash 需要在开始运行之前解析整个循环。因此,如果循环中的某些内容使用了 extglob,则必须在循环开始之前启用它。
| 归档时间: |
|
| 查看次数: |
657 次 |
| 最近记录: |