为什么这个 bash IF 语句不起作用?

Why is this bash IF statement not working?

if [[ $DATA == *?xml* ]]
then
    if [[ $DATA == *misuse* ]]
    then echo "Misuse" >> $OUTPUTPAST2
    else echo "All Good" >> $OUTPUTPAST2
    fi
else echo "Not xml" >> $OUTPUTPAST2
fi

其中 $DATA 不包含字符串 ?xml我期待 Not xml 的输出,但我得到 All Good 的输出。

我做错了什么?

?是glob中的特殊字符,表示匹配任意单个字符。

这样使用:

if [[ "$DATA" == *'?xml'* ]]
then
    if [[ "$DATA" == *misuse* ]]
    then echo "Misuse" >> $OUTPUTPAST2
    else echo "All Good" >> $OUTPUTPAST2
    fi
else
    echo "Not xml" >> $OUTPUTPAST2
fi

虽然引用问号足以解决您眼前的问题,但这段代码看起来真的很想成为 case 语句。

case $DATA in
    *'?xml'*misuse* | *misuse*'?xml'*)
              echo Misuse ;;
    *'?xml'*) echo All Good ;;
    *)        echo Not xml;;
esac >>$OUTPUTPAST2

另请注意如何在整个块之后进行重定向,以避免大量重复。

(如果"misuse"只能跟在“?xml”标记后面,可以简化。)