我需要測試一個變量是不是還是其他什麼東西:如何在bash測試一個或兩個條件
a="6" ; if [ "$a" != "6" ] || [ "$a" != "4" ] ; then echo "ok" ; fi
回報:OK
我只是不明白這一點... ?!!
我需要測試一個變量是不是還是其他什麼東西:如何在bash測試一個或兩個條件
a="6" ; if [ "$a" != "6" ] || [ "$a" != "4" ] ; then echo "ok" ; fi
回報:OK
我只是不明白這一點... ?!!
嘗試
if [ "$a" != "6" -o "$a" != "4" ] ...
但由於這個條件始終是真的,那是沒有意義的($ A不能4和6在同一時間)。你可能想and
代替:
if [ "$a" != "6" -a "$a" != "4" ] ...
'-o'和'-a'都已棄用。使用'[...] || [...]和[...] && [...]'分別。 – chepner 2014-10-10 15:28:00
你需要[[condition1 operator condition2]] – 2014-10-10 16:23:23
如果你想確保$a
是既不 6也不4,使用
if [ "$a" != 6 ] && [ "$a" != 4 ]; then
echo "a is neither 6 nor 4"
else
....
fi
或
if [ "$a" = 6 ] || [ "$a" = 4 ]; then
echo "a is either 6 or 4"
else
....
fi
對於這種特殊情況下(兩個單位數字),模式匹配更短:
if [[ $a != [46] ]]; then
echo "a is neither 4 nor 6"
fi
[閱讀'測試'手冊頁。](http://man7.org/linux/man-pages/man1/test.1.html)你想要的信息在頁面的早期。 – 2014-10-10 13:56:58
您正在使用或; 6!= 4,所以第二部分是真實的,使整個陳述成真。 – Evert 2014-10-10 13:59:00
@Evert是正確的。你真正想要的邏輯測試是「!」(「$ a」==「6」||「$ a」==「4」)''。 or'ing不等於*不等於or'd等於的組合。你也可以做''「$ a」!=「6」&&「$ a」!=「4」'',這在邏輯上是等效的。 – aruisdante 2014-10-10 14:03:37