Bash ile başlayan: -lt ve -gt argümanları


24

Bash ile başlıyorum ve aşağıdakileri buldum:

if test $first -lt $second
then
  echo $first is lower than $second
else
  if test $first -gt $second
  then
    echo $first is higher than $second
  else
    echo $first and $second are equals
  fi
fi

Senaryoyu okumak ve çalıştırmak için ne işe yaradığını biliyorum, ama -lt ve -gt'nin ne için olduğunu değil.

Biri bana bu tür bir "aracın" ismini ve ne (-lt ve -gt) yaptıklarını söyleyebilir mi? Teşekkürler!


9
Üzgünüm, echokoddaki ifadelerin sorunuzu yanıtladığına işaret etmeye değer hissediyorum .
devnull

Değişkenlerin etrafında eksik alıntılar var
Stéphane Chazelas

Yanıtlar:


29

Bu kısaltılmışı less thanve greater than. Bash'ta tamsayı karşılaştırma için kullanılır Yazarak daha fazlasını okuyabilirsiniz man test:

   ....
   INTEGER1 -gt INTEGER2
          INTEGER1 is greater than INTEGER2
   ....
   INTEGER1 -lt INTEGER2
          INTEGER1 is less than INTEGER2
   ....

7

Sen tanımını bulabilirsiniz -ltve -gtbir belgelerinde testkomuta ( man test) veya Bash belgelerinde beri testyerleşik bir komuta bash (çoğu diğer kabukları gibi) 'dir.

-ltve -gtsayısal karşılaştırmalar (eşit [] 'den küçük ve eşit değil], eşit [değerden küçük] ve. Aynı zamanda daha az / daha büyük ya da eşit-operatör vardır -leve -ge, eşit ve-eşit değildir operatörler -eqve -ne. Bunlar sayısal işleçlerdir, bu nedenle her iki taraf da sayı değilse ve 9ondan daha az kabul edilirse bir hata olacaktır 10.

Bunun gibi isimlerin -ltnormalden ziyade kullanılmasının nedeni <, karakterin <yeniden yönlendirme olarak yorumlanmasıdır. İşleçler =ve !=ayrıca var, ancak bir dize karşılaştırması yapıyorlar: test 00 -eq 0true iken test 00 = 0yanlış.

Bash dahil bazı mermiler de operatörlere sahiptir <ve >bir dizge sözlük karşılaştırması yaparlar, bu test 9 \< 10nedenle yanlıştırlar çünkü 9daha önce sıralanırlar 1(ters eğik çizgi karakterin <bir yönlendirme operatörü olarak yorumlanmasını önler ). Bu kabuklar ayrıca testler için çift dirsek sözdizimi de sunar, örneğin [[ 9 < 10 ]](tersi gibi [ 9 \< 10 ]) içinde yeniden yönlendirme <yapamayacak şekilde alıntı yapılması gerekmez.


4

Onlar sadece operatör.

Basitçe: gtve lt> (daha büyük) ve <(daha küçük) anlamına gelir.

Operatörler hakkında daha fazla bilgi için buraya bakabilirsiniz :


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.