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

时间:2015-01-29 09:48:24

标签: bash if-statement

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的输出。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

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

像这样使用:

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

答案 1 :(得分:1)

虽然引用问号就足以解决您的问题,但这看起来像是真正想成为case语句的代码。

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

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

(如果"误用"只能在"?xml"标记之后,你可以简化。)