2014-10-10 27 views
-1

我需要測試一個變量是不是還是其他什麼東西:如何在bash測試一個或兩個條件

a="6" ; if [ "$a" != "6" ] || [ "$a" != "4" ] ; then echo "ok" ; fi 

回報:OK

我只是不明白這一點... ?!!

+0

[閱讀'測試'手冊頁。](http://man7.org/linux/man-pages/man1/test.1.html)你想要的信息在頁面的早期。 – 2014-10-10 13:56:58

+3

您正在使用或; 6!= 4,所以第二部分是真實的,使整個陳述成真。 – Evert 2014-10-10 13:59:00

+0

@Evert是正確的。你真正想要的邏輯測試是「!」(「$ a」==「6」||「$ a」==「4」)''。 or'ing不等於*不等於or'd等於的組合。你也可以做''「$ a」!=「6」&&「$ a」!=「4」'',這在邏輯上是等效的。 – aruisdante 2014-10-10 14:03:37

回答

2

嘗試

if [ "$a" != "6" -o "$a" != "4" ] ... 

但由於這個條件始終是真的,那是沒有意義的($ A不能4和6在同一時間)。你可能想and代替:

if [ "$a" != "6" -a "$a" != "4" ] ... 
+0

'-o'和'-a'都已棄用。使用'[...] || [...]和[...] && [...]'分別。 – chepner 2014-10-10 15:28:00

+0

你需要[[condition1 operator condition2]] – 2014-10-10 16:23:23

1

如果你想確保$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 
相關問題