2011-06-14 88 views
9

出於某種原因,這個腳本打印「字符串是相等的」字符串比較不工作

#!/bin/bash 
A='foo' 
B='bar' 

if [ $A=$B ]; 
then 
    echo 'strings are equal' 
fi 

我在做什麼錯?

回答

16

你必須離開等號周圍的空間:

if [ "$A" = "$B" ]; 
then 
    echo 'strings are equal' 
fi 

編輯:請還會注意到周圍的變量引號。沒有他們,如果其中一個人是空的,你會陷入困境。

否則測試被解釋爲測試字符串「foo = bar」的長度是否大於0
man test

... 
    STRING equivalent to -n STRING 
    -n STRING 
      the length of STRING is nonzero 
    ... 
+0

這是還值得指出的是,你做了正確的事情,並在變量周圍添加引號。如果您比較的字符串不帶引號,而其中一個爲空,則由於格式錯誤的測試,您的腳本將退出。 –

+0

@凱爾:是的,你說得對。我應該提到這個事實。 – bmk

7

你應該有空格周圍等號字符:

if [ $A = $B ]; 
    ^^ 
     There 

此外,你應該引用變量,就像這樣:

if [ "$A" = "$B" ];