2011-06-14 3 views

cevap

16

Sen eşittir işareti etrafında bir boşluk bırakmak zorunda:

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

Edit: da değişkenler tırnak işaretleri fark edin. Onlarsız, bunlardan biri boşsa belaya girersiniz. Aksi takdirde, test "foo = bar" dizesinin uzunluğu> 0 ise, test testi olarak yorumlanır.
man test bakınız:

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

Bu açıklanmıştır: Ayrıca

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

, böyle, değişkenleri alıntı gerektiğini Ayrıca doğru şeyi yaptığınızı ve değişkenler etrafında alıntılar eklediğinize de değinelim. Dizeleri tırnak işareti olmadan karşılaştırıyorsanız ve boş olanı ise, hatalı biçimlendirilmiş bir sınama nedeniyle komut dosyanızdan çıkacaktır. –

+0

@Kyle: Evet, haklısın. Bu gerçeği söylemeliydim. – bmk

7

Sen karakterini eşittir etrafında boşluk bulunması gerekliydi:

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