Beginnend mit den Argumenten bash: -lt und -gt

24

Ich fange mit bash an und habe folgendes herausgefunden:

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

Um das Skript zu lesen und auszuführen, weiß ich, was es tut, aber nicht, wofür -lt und -gt sind.

Kann mir jemand sagen, wie diese Art von "Werkzeug" heißt und was sie (-lt und -gt) tun? Vielen Dank!

user47579
quelle
9
Entschuldigung, aber ich möchte darauf hinweisen, dass die echoAussagen im Code Ihre Frage beantworten.
Devnull
Es fehlen Anführungszeichen um die Variablen
Stéphane Chazelas

Antworten:

29

Es ist eine Abkürzung für less thanund greater than. Es wird für den Ganzzahlvergleich in Bash verwendet. Sie können mehr lesen, indem Sie Folgendes eingeben man test:

   ....
   INTEGER1 -gt INTEGER2
          INTEGER1 is greater than INTEGER2
   ....
   INTEGER1 -lt INTEGER2
          INTEGER1 is less than INTEGER2
   ....
cuonglm
quelle
7

Sie finden die Definition von -ltund -gtin der Dokumentation des testBefehls ( man test) oder in der Dokumentation von bash, da bash testeinen eingebauten Befehl enthält (wie in den meisten anderen Shells).

-ltund -gtsind numerische Vergleiche (kleiner als [und nicht gleich], größer als [und nicht gleich]). Es gibt auch weniger / mehr oder gleiche Operatoren -leund -geund gleiche und ungleiche Operatoren -eqund -ne. Dies sind numerische Operatoren, daher tritt ein Fehler auf, wenn keine Seite eine Zahl ist und 9als kleiner als betrachtet wird 10.

Der Grund, warum Namen wie verwendet -ltwerden, <ist, dass das Zeichen <als Umleitung interpretiert wird. Die Operatoren =und sind !=ebenfalls vorhanden, führen jedoch einen Zeichenfolgenvergleich durch: test 00 -eq 0ist wahr, während test 00 = 0falsch ist.

Einige Muscheln, einschließlich bash, haben auch Betreiber <und >die führen einen String lexicographic Vergleich, so test 9 \< 10ist falsch , weil 9vor sortiert ist 1(die Backslash verhindert das Zeichen <aus als Umleitungsoperator interpretiert wird). Diese Shells bieten auch die doppelte Klammer-Syntax für Tests, z. B. [[ 9 < 10 ]](im Gegensatz zu [ 9 \< 10 ]), die keine Umleitungen enthalten, sodass <sie nicht in Anführungszeichen gesetzt werden müssen.

Gilles 'SO - hör auf böse zu sein'
quelle
4

Sie sind nur Betreiber.

Einfach: gtund ltbedeuten> (größer als) und <(kleiner als).

Sie können sehen hier , um weitere Informationen zu Operatoren:

Fragezeichen
quelle