Bash karşılaştırma ve ifade operatörleri


11

Ben bash programlamasında yeniyim. İki güzel, uzun rehber okudum, ama kafamda operatörler ve anahtar kelimeler hakkında bir karışıklık yarattılar.

Hangileri daha yaygın ve yaygın olarak kullanılır? Hangisini ve neden kullanacağımı bilmiyorum.

  1. test, [[ ]]Veya [ ]hatta(( ))
  2. $((exp)) veya $[exp]
  3. -gtya da >, geya da >=vs.
  4. ne zaman kullanılacağına <ve / >veya ( )ne zaman kaçmamız gerektiğine \: \< \(vb.
  5. ==veya =(dize karşılaştırmaları)

Ben arasındaki temel farkları bilmek [ve [[diğer sorular benim için bir sır vardır ama.

Şimdiden teşekkür ederim


2
Güncel ve çok iyi uygulamalardan bahseden çok kullanışlı bir wiki, Greg'in wiki'sidir . Bash rehberi ve buradaki SSS özellikle yararlıdır.

Yanıtlar:


5
  • testbelirli bir durum için (açık bir şekilde) test yapan bir kabuk yerleşiktir. Bazı eski mermilerin özel bir komuta ihtiyacı vardır. Yani adresinde bir program da bulacaksınız /usr/bin/test.
  • [ayrıca bazı durumları test etmek için bir programdır. Bu yazılımın ayrıca bir kapanma dirseğine ihtiyacı vardır ve bunu bulabilirsiniz /usr/bin/[.
  • [[…]]Bir alternatif olan testve [. Korn kabuğu ( ksh) için geliştirilmiştir . Ancak 2'den büyük Bash sürümlerinde ve Z Kabuğunda da bulabilirsiniz. Çift braketlerin bazı şık özellikleri vardır:
    • Kabuk sözcük bölme veya dosya adı genişletme yapmaz.
    • Alıntı yapmanıza gerek yok.
    • Yerine -a(AND) veya -o(OR) kullanabilirsiniz &&ya ||.
    • =Daha bir çok şey yapabilir.
  • ((…))eşittir let. Yani temelde ((expression))aynı let "expression". Bununla birlikte let, birden fazla ifade kullanabilirsiniz, ancak çift ayraçlar yalnızca bir ifadeye izin verir.
  • $((…))(ve ayrıca $[…]) bazı hesaplamalar yapar. Kabuk parantez içindeki ifadeyi hesaplamaya çalışır ve ifadeyi sonuçla değiştirir. Böylece echo $((1+1))yol açar echo 2. Böylece mermileriniz 2 sayısını basar.

Her zaman bir çizgi ve iki harf ile (seçeneği kullanmalısınız iki sayıyı karşılaştırmak istediğinizde -ge, -ltvs.). Dizeleri karşılaştırmak istiyorsanız =veya kullanmalısınız !=.

Kaçmakla ilgili sorunuza cevap vermek oldukça zor. Çünkü kabuk dışında kullandığınız yazılıma bağlıdır. Yani yani grepve grep -Efarklı kaçış gerekir. Bu aynı zamanda olduğu sed, awkve diğerleri. Bu yüzden en iyi seçenek, man sayfasına bir göz atmaktır. Bir süre sonra alışırsınız ve kaçmayı ne zaman kullanacağınızı bilirsiniz.


teşekkür ederim. bir soru daha - çünkü ((...)) kullanarak karşılaştırma yapmak mümkün - bu sürümü kullanmak daha yaygın mı: if ((2> 1)) VEYA bu: eğer [[2 -gt 1]]
MikeD

Bunun if [ 2 -gt 1 ]; …daha yaygın olduğunu varsayacağım , çünkü bunu kabuk komut dosyalarında daha sık görüyorum ve bildiğim kadarıyla POSIX uyumlu.
qbi

Akılda tutulması gereken başka bir şey, ifade sıfır olarak / döndürürse [ifade] 'nin doğru, ancak ifade sıfırdan farklı olarak değerlendirilirse / döndürürse ((ifade))' nin doğru olduğudur.
Joe
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.