在if语句中使用变量的bash通配符

时间:2015-02-11 09:22:00

标签: string bash if-statement wildcard

我想根据this solution在字符串中找到子字符串。

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

str="abcd";
substr="abc";
if [[ "${substr}"* == ${str} ]]
then
        echo "CONTAINS!";
fi

1 个答案:

答案 0 :(得分:5)

在参考手册section Conditional Constructs中,您将阅读[[ ... ]]的文档:

  

当使用==!=运算符时,运算符右侧的字符串被视为模式,并根据{{{ 3}},就像启用了extglob shell选项一样。

(强调是我的)。

所以你需要将你的glob模式放在==运算符的右边:

if [[ $str == "$substr"* ]]; then

请注意,左侧不需要引用,但右侧的部分$substr需要引用,以防它包含像{{一样的全局字符1}},*?[...]