Począwszy od argumentów bash: -lt i -gt

24

Zaczynam od bash i znalazłem następujące:

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

Do czytania skryptu i wykonywania go wiem, co robi, ale nie do czego służą -lt i -gt.

Czy ktoś może mi powiedzieć, jak nazywa się tego rodzaju „narzędzie” i co robią (-lt i -gt)? Dzięki!

użytkownik47579
źródło
9
Przykro mi, ale uważam, że warto zaznaczyć, że echostwierdzenia w kodzie odpowiadają na twoje pytanie.
devnull
Brakuje cudzysłowów wokół zmiennych
Stéphane Chazelas

Odpowiedzi:

29

To jest skrót od less thani greater than. Służy do porównania liczb całkowitych w bash. Możesz przeczytać więcej, pisząc man test:

   ....
   INTEGER1 -gt INTEGER2
          INTEGER1 is greater than INTEGER2
   ....
   INTEGER1 -lt INTEGER2
          INTEGER1 is less than INTEGER2
   ....
Cuonglm
źródło
7

Możesz znaleźć definicję -lti -gtw dokumentacji testpolecenia ( man test) lub w dokumentacji bash, ponieważ testjest to wbudowane polecenie w bash (jak w większości innych powłok).

-lti -gtsą porównaniami numerycznymi (mniej niż [i nie równy], większy niż [i nie równy]). Istnieją również operatory mniej / większe lub równe -leoraz -georaz równe i nierówne operatory -eqi -ne. Są to operatory numeryczne, więc wystąpi błąd, jeśli jedna ze stron nie będzie liczbą i 9zostanie uznana za mniejszą niż 10.

Powodem, dla którego -ltużywa się takich nazw, jak zwykle, <jest <interpretacja znaku jako przekierowania. Operatorzy =i !=istnieje również, ale wykonać porównanie wyrażenie: test 00 -eq 0jest prawdą natomiast test 00 = 0jest fałszywa.

Niektóre powłoki, w tym bash, również mają operatory <i >które wykonują porównanie leksykograficzne ciągów, więc test 9 \< 10jest to fałsz, ponieważ 9jest sortowany wcześniej 1(odwrotny ukośnik zapobiega interpretacji znaku <jako operator przekierowania). Powłoki te oferują również składnię podwójnego nawiasu do testów, np. [[ 9 < 10 ]](W przeciwieństwie do [ 9 \< 10 ]), które nie mogą zawierać przekierowań, więc <nie trzeba ich cytować.

Gilles „SO- przestań być zły”
źródło
4

Są tylko operatorami.

Po prostu: gti ltoznacza> (większe niż) i <(mniejsze niż).

Możesz tu znaleźć więcej informacji na temat operatorów:

Znak zapytania
źródło