it-swarm-tr.com

Bash: çift eşittir -eq

Bash (kullanıcı kök olarak çalışıp çalışmadığını görmek için çalışıyor) tamsayı karşılaştırma yapıyorum ve bunu yapmak için iki farklı yol buldum:

Çift eşittir:

if [ $UID == 0 ]
then
fi

-eq

if [ $UID -eq 0 ]
then
fi

Ben bash, sadece -ge ve -le hiçbir = = veya <= olduğunu anlıyorum, bir == Varsa neden bir -eq Var?

Her iki tarafı karşılaştırma biçiminde bir fark var mı?

49
beatgammit

==, = Sayısal karşılaştırması yerine bir dize (sözlüksel) karşılaştırma gerçekleştiren, -eq İçin bash'ye özgü bir takma addır. (Perl'den geriye doğru: Word tarzı operatörler sayısaldır, sembolik olanlar sözcükseldir.)

55
geekosaur

bollovan'ın cevabı ...

Hiçbir >= veya <= dizeler için karşılaştırma operatörü. Ama bunları ((...)) tamsayıları karşılaştırmak için aritmetik komut.

Diğer dize karşılaştırma işleçlerini de kullanabilirsiniz (==, !=, <, >, Ama değil =) ((...)).

örnekleri

  • Her ikisi de [[ 01 -eq 1 ]] ve (( 01 == 1 )) tamsayı karşılaştırmaları yapar. Her ikisi de doğrudur.
  • Her ikisi de [[ 01 == 1 ]] ve [ 01 = 1 ] dize karşılaştırmaları yapar. Her ikisi de yanlış.
  • Her ikisi de (( 01 -eq 1 )) ve (( 01 = 1 )) bir hata döndürür.

Not: Çift köşeli ayraç sözdizimi [[...]] ve çift parantez sözdizimi ((...)) tüm kabuklar tarafından desteklenmez.

13
toxalot

Tamsayı karşılaştırması yapmak istiyorsanız, (=) öğesini de kullanabilirsiniz; burada = = vb.

Misal:

if (( $UID == 0 )); then
   echo "You are root"
else
   echo "You are not root"
fi
7
bollovan