Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 用正则表达式解析bash选项字符串_Regex_Bash_Options - Fatal编程技术网

Regex 用正则表达式解析bash选项字符串

Regex 用正则表达式解析bash选项字符串,regex,bash,options,Regex,Bash,Options,稍后,我将使用getopt对命令行选项进行实际解析,但如果存在某些标志的选项,我希望尽早启用它们。我试图在脚本开头用正则表达式解析它们: 这是我目前所拥有的,但它不起作用。我似乎找不到任何其他人这样做的例子(可能是原因,不确定是什么): 编辑: 基于@mklement0建议的解决方案 以下工作如预期: [[ ${__[OPT]} =~ $(echo '(-d\b)|(--debug\b)') ]] && __[DEBUG]=true || __[DEBUG]=false [[ $

稍后,我将使用getopt对命令行选项进行实际解析,但如果存在某些标志的选项,我希望尽早启用它们。我试图在脚本开头用正则表达式解析它们:

这是我目前所拥有的,但它不起作用。我似乎找不到任何其他人这样做的例子(可能是原因,不确定是什么):

编辑: 基于@mklement0建议的解决方案

以下工作如预期:

[[ ${__[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\ ) ]] && ...