Regex 用正则表达式解析bash选项字符串
稍后,我将使用getopt对命令行选项进行实际解析,但如果存在某些标志的选项,我希望尽早启用它们。我试图在脚本开头用正则表达式解析它们: 这是我目前所拥有的,但它不起作用。我似乎找不到任何其他人这样做的例子(可能是原因,不确定是什么): 编辑: 基于@mklement0建议的解决方案 以下工作如预期:Regex 用正则表达式解析bash选项字符串,regex,bash,options,Regex,Bash,Options,稍后,我将使用getopt对命令行选项进行实际解析,但如果存在某些标志的选项,我希望尽早启用它们。我试图在脚本开头用正则表达式解析它们: 这是我目前所拥有的,但它不起作用。我似乎找不到任何其他人这样做的例子(可能是原因,不确定是什么): 编辑: 基于@mklement0建议的解决方案 以下工作如预期: [[ ${__[OPT]} =~ $(echo '(-d\b)|(--debug\b)') ]] && __[DEBUG]=true || __[DEBUG]=false [[ $
[[ ${__[OPT]} =~ $(echo '(-d\b)|(--debug\b)') ]] && __[DEBUG]=true || __[DEBUG]=false
[[ ${__[OPT]} =~ $(echo '(-v\b)|(--verbose\b)') ]] && __[VERBOSE]=true || __[VERBOSE]=false
\b
未被=~
运算符识别为单词边界标记。只需使用空格即可(因为空格将分隔${{uuu[OPT]}
中的选项)
虽然使用空格是一个很好的建议,但它取决于平台(不幸的是)
=~
是否识别\b
。bash4.x中关于regex文本的一个bug把图片弄糊涂了;使用中间变量进行测试:尝试re='a\b';[['a'=~$re]]和&echo YES
;在Linux上,它会成功;相比之下,它在OSX上不起作用(您必须使用re='a[[:>:]]'
)。我最初尝试使用空格,但是当标志位于选项字符串末尾(即:“bish-d”)时,它不匹配。感谢您提供有关bash 4.x错误的信息,这似乎是问题所在。
[[ ${__[OPT]} =~ $(echo '(-d\b)|(--debug\b)') ]] && __[DEBUG]=true || __[DEBUG]=false
[[ ${__[OPT]} =~ $(echo '(-v\b)|(--verbose\b)') ]] && __[VERBOSE]=true || __[VERBOSE]=false
[[ ${__[OPT]} =~ (-d\ )|(--debug\ ) ]] && ...