2014-10-20 52 views
-1

我想一些字符在BASH爲什麼我在BASH中的比較工作?

read a 
if (($a == "Y")) 
then 
    echo "YES" 
elif (($a == "y")) 
then 
    echo "YES" 
else 
    echo "NO" 
fi 

比較,但由於某種原因,如預期這是行不通的。它總是輸出YES。看着這個超級簡單的腳本,我不明白什麼是錯的。

回答

6

這是由於間距和括號。

read a 
if [[ $a == "Y" ]] 
then 
    echo "YES" 
elif [[ $a == "y" ]] 
then 
    echo "YES" 
else 
    echo "NO" 
fi 
+1

我爲什麼被拒絕投票? – KRUKUSA 2014-10-20 02:05:57

+0

這不是由於間距,這是因爲他們使用括號而不是方括號。 – whereswalden 2014-10-20 02:06:01

+0

@whereswalden也包括括號中的間距。對不起,我忘了指定兩個 – KRUKUSA 2014-10-20 02:06:29

1

您應該檢討bash comparison。您正試圖使用​​算術擴展結構來進行字符串比較。相反,您應該使用[ exp ][[ exp ]]結構。

0

((表達式))用於 '算術評價' 和字符串內(())將被視爲變量名,從而

如果(($一個== 「Y」))

相當於

如果[$ A == $ Y]

(如$ Y是一個字符串,然後bash將試圖展開名字,直到它找到一個數值或未定義的變量)

您需要使用[]或[[]]來比較字符串,如@KRUKUSA所述。

相關問題