Herhangi bir nedenle bu komut dosyası "dize eşittir"Dize karşılaştırma çalışmıyor
#!/bin/bash
A='foo'
B='bar'
if [ $A=$B ];
then
echo 'strings are equal'
fi
yazdırıyor Ne yapıyorum yanlış?
Herhangi bir nedenle bu komut dosyası "dize eşittir"Dize karşılaştırma çalışmıyor
#!/bin/bash
A='foo'
B='bar'
if [ $A=$B ];
then
echo 'strings are equal'
fi
yazdırıyor Ne yapıyorum yanlış?
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
...
Sen karakterini eşittir etrafında boşluk bulunması gerekliydi:
if [ "$A" = "$B" ];
Bu açıklanmıştır: Ayrıca
, 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. –
@Kyle: Evet, haklısın. Bu gerçeği söylemeliydim. – bmk