Bash正则表达式匹配不起作用

pil*_*ght 9 regex linux bash shell terminal

所以我有这个功能

function test(){
 local output="CMD[hahahhaa]"
 if [[ "$output" =~ "/CMD\[.*?\]/" ]]; then
  echo "LOOL"
 else
  echo "$output"
 fi;

}
Run Code Online (Sandbox Code Playgroud)

但是,在命令行中执行测试会输出$ output而不是"LOOL",尽管模式应匹配$ output ...

我做错了什么?

Rav*_*yal 19

不要使用引号 ""

if [[ "$output" =~ ^CMD\[.*?\]$ ]]; then
Run Code Online (Sandbox Code Playgroud)


更新: 回应@frhd)

好吧,正则表达式运算符=~期望在其RHS上有一个不带引号的正则表达式,并且除了锚点^(输入的开始)之外,它只会匹配一个子字符串.$(输入的结尾)也用于使其与整个LHS匹配.

引号 ""会覆盖此行为并强制执行简单的字符串匹配,即匹配器开始\[.*?\]逐字地查找所有这些字符.