bash通配符,if语句中带有变量

hud*_*dac 2 string bash if-statement wildcard

我想根据此解决方案在字符串中找到子字符串。

但是由于某种原因,它不适用于变量:

str="abcd";
substr="abc";
if [[ "${substr}"* == ${str} ]]
then
        echo "CONTAINS!";
fi
Run Code Online (Sandbox Code Playgroud)

gni*_*urf 5

在参考手册的条件构造部分中,您将阅读以下文档[[ ... ]]

当使用==and !=运算符时,该运算符右边的字符串将被视为一个模式,并根据以下Pattern Matching中所述的规则进行匹配,就好像extglob启用了shell选项一样。

(强调是我的)。

因此,您需要将glob模式放在运算符的右侧==

if [[ $str == "$substr"* ]]; then
Run Code Online (Sandbox Code Playgroud)

请注意,左侧的需求不被引用,但部分$substr的右侧需求被引用,如果它包含水珠字符,如*?[...]+(...),等。