Regex 如何将文本与变量中的正则表达式进行比较?

Regex 如何将文本与变量中的正则表达式进行比较?,regex,bash,Regex,Bash,我在input.txt中有以下内容: EA06\\?\.LFRFLB\\?\..* 我想知道此模式是否与以下字符串匹配: EA06.LFRFLB.SHELLO 然后我编码: MY_STRING="EA06.LFRFLB.SHELLO" REGEX=$(cat input.txt) # EA06\\?\.LFRFLB\\?\..* if [[ "${MY_STRING}" =~ "${REGEX}" ]]; then echo "FOUND" else echo "NOT FOUND"

我在input.txt中有以下内容:

EA06\\?\.LFRFLB\\?\..*
我想知道此模式是否与以下字符串匹配:

EA06.LFRFLB.SHELLO
然后我编码:

MY_STRING="EA06.LFRFLB.SHELLO"
REGEX=$(cat input.txt) # EA06\\?\.LFRFLB\\?\..*

if [[ "${MY_STRING}" =~ "${REGEX}" ]]; then
  echo "FOUND"
else
 echo "NOT FOUND"
fi

if [[ "${MY_STRING}" =~ EA06\\?\.LFRFLB\\?\..* ]]; then
  echo "FOUND"
else
 echo "NOT FOUND"
fi
结果:

NOT FOUND
FOUND

这里出了什么问题?为什么第一个if不正确匹配?解决此问题的最佳方法是什么?

问题是您引用了二进制运算符
=~
的RHS上的变量,这导致变量替换被视为文字文本,而不是正则表达式。你需要说:

if [[ "${MY_STRING}" =~ ${REGEX} ]]; then
从手册中引用:

请特别注意最后一行:

可以引用模式的任何部分,以强制将其作为字符串进行匹配


问题是您引用了二进制运算符
=~
的RHS上的变量,这导致变量替换被视为文本而不是正则表达式。你需要说:

if [[ "${MY_STRING}" =~ ${REGEX} ]]; then
从手册中引用:

请特别注意最后一行:

可以引用模式的任何部分,以强制将其作为字符串进行匹配


cat input.txt的输出不应该有引号吗?为什么会有引号,字符串是不同的?@Jidder今天我的大脑受了太多的伤害。呵呵。。。我应该暂时远离这种shell脚本编写的东西;)cat input.txt的输出不应该有引号吗?为什么会有引号,字符串是不同的?@Jidder今天我的大脑受了太多的伤害。呵呵。。。我应该暂时远离这种shell脚本编写的东西;)@JohnDoe注意到,通常的建议是总是引用参数扩展,但在
[[…]]
内部并不适用,因为适用的规则不同。特别是,此类参数扩展不受文件名生成或word的限制splitting@JohnDoe请注意,通常关于总是引用参数扩展的建议不适用于
[…]]
内部,因为适用不同的规则。特别是,此类参数扩展不受文件名生成或字拆分的影响