Bash正则表达式匹配不起作用 - 转义所有特殊字符

J33*_*3nn 4 regex bash

我遇到了与bash正则表达式匹配的问题.我有这样的正则表达式:

re="fatal: file not found: .+/tmp_dir_1234/([^\ ]*) \(No such file or directory\)"
test="fatal: file not found: /some/path/irrelevant/something/tmp_dir_1234/somefile.txt (No such file or directory)"
if [[ "$test" =~ "$re" ]]; then
    echo "match!"
fi
Run Code Online (Sandbox Code Playgroud)

对我来说,这里的一切看起来都很好但是出于某种原因,在调试bash脚本时我可以看到它与字符串不匹配:

+ [[ fatal: file not found: /some/path/irrelevant/something/tmp_dir_1234/somefile.txt (No such file or directory) =~ fatal: file not found: \.\+/tmp_dir_1234/\(\[\^\\ ]\*\) \\\(No such file or directory\\\) ]]
Run Code Online (Sandbox Code Playgroud)

出于某种原因,正则表达式模式被转义.

cho*_*oba 7

从匹配中的正则表达式中删除双引号:

if [[ "$test" =~ $re ]]; then
    echo "match!"
fi
Run Code Online (Sandbox Code Playgroud)

在双方括号中,不需要引用变量,因为它们是以特殊方式解析的.详情man bash请见:

不对[[和]]之间的单词执行单词拆分和路径名扩展; 执行波形扩展,参数和变量扩展,算术扩展,命令替换,进程替换和引用删除.