Bash双方括号正则表达式匹配问题

sjs*_*sam 7 bash

请考虑以下代码:

$ var1=bingo
$ var2=.ingo
$ if [[ "$var1" =~ $var2 ]]; then echo found; fi
found
$ if [[ $var1 =~ "$var2" ]]; then echo found; fi    # line 5
$ if [[ "$var1" =~ "$var2" ]]; then echo found; fi  # line 6
$ if [[ $var1 =~ $var2 ]]; then echo found; fi
found
Run Code Online (Sandbox Code Playgroud)

以上就是我在bash shell中所做的.

问题是为什么没有线56打印found

我想我已经知道了答案,但我正在寻找一个简单易懂的答案.

总而言之,当在右侧使用变量(内部双引号)时=~,双引号是否仅用于变量扩展?

Sea*_*ght 8

假设您正在运行Bash 3.2或更新版本,bash手册(向下滚动到描述[[…]])指出:

可引用图案的任何部分以迫使引用部分匹配为字符串.

并进一步:

如果模式存储在shell变量中,引用变量扩展会强制整个模式匹配为字符串.

在Bash 3.2之前,您提供的示例可以按预期工作.