if 块上的模式匹配

if 块上的模式匹配

我试图通过 if 块匹配存储在变量中的模式。根据我的理解,这应该是一个匹配并得到“Match”回显语句。然而,似乎并不匹配。

patern=EOD*psv
file=EOD_test_20160404.psv

if [[ $file == *"$patern" ]]
then
    echo "Match";
else
    echo "No Match";
fi

输出:

没有匹配

file为什么变量值与指定模式不匹配?

答案1

当使用 '==' 和 '!=' 运算符时,运算符右侧的字符串被视为模式并根据下面描述的规则进行匹配模式匹配

因此,当您在模式中包含双引号时,bash 期望在文件名中看到它们。删除双引号和/或前导*即可成功。

if [[ $file == $patern ]]
then
    echo "Match";
else
    echo "No Match";
fi

相关内容