为什么这个 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”标记后面,可以简化。)
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”标记后面,可以简化。)