我遇到了与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
对我来说,这里的一切看起来都很好但是出于某种原因,在调试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\\\) ]]
出于某种原因,正则表达式模式被转义。
答案 0 :(得分:6)
从匹配中的正则表达式中删除双引号:
if [[ "$test" =~ $re ]]; then
echo "match!"
fi
在双方括号中,不需要引用变量,因为它们是以特殊方式解析的。有关详细信息,请参阅man bash
:
不对[[和]]之间的单词执行单词拆分和路径名扩展;执行代码扩展,参数和变量扩展,算术扩展,命令替换,进程替换和引用删除。