Начиная с аргументов bash: -lt и -gt

24

Я начинаю с bash и обнаружил следующее:

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

Для чтения сценария и его выполнения я знаю, что он делает, но не то, для чего нужны -lt и -gt.

Может кто-нибудь сказать мне, как называется этот «инструмент» и что они (-lt и -gt) делают? Благодарность!

user47579
источник
9
Извините, но я чувствую, что стоит отметить, что echoутверждения в коде отвечают на ваш вопрос.
devnull
Вокруг переменных отсутствуют кавычки
Стефан Шазелас

Ответы:

29

Это сокращение от less thanи greater than. Используется для сравнения целых чисел в bash. Вы можете узнать больше, набрав man test:

   ....
   INTEGER1 -gt INTEGER2
          INTEGER1 is greater than INTEGER2
   ....
   INTEGER1 -lt INTEGER2
          INTEGER1 is less than INTEGER2
   ....
cuonglm
источник
7

Вы можете найти определение -ltи -gtв документации по testкоманде ( man test), или в документации по bash, поскольку testэто встроенная команда в bash (как и в большинстве других оболочек).

-ltи -gtявляются числовыми сравнениями (меньше чем [и не равно], больше чем [и не равно]). Существуют также операторы меньше / больше или равны -leи -ge, и операторы равны и не равны -eqи -ne. Это числовые операторы, поэтому будет ошибка, если любая из сторон не является числом и 9считается меньше 10.

Причина, по которой такие имена -ltиспользуются, а не обычные, <заключается в том, что символ <будет интерпретироваться как перенаправление. Операторы =и !=также существуют, но они выполняют сравнение строк: test 00 -eq 0истинно тогда test 00 = 0ложно.

Некоторые оболочки, в том числе Баш, также операторы <и >которые выполняют строковое сравнение лексикографическую, поэтому test 9 \< 10является ложным , поскольку 9сортируется перед тем 1(обратной косой черты предотвращает характер <от интерпретации в качестве оператора перенаправления). Эти оболочки также предлагают синтаксис двойных скобок для тестов, например [[ 9 < 10 ]](в отличие от [ 9 \< 10 ]), которые не могут иметь перенаправления внутри, поэтому <не нужно заключать в кавычки.

Жиль "ТАК - перестань быть злым"
источник
4

Они просто операторы.

Просто: gtи ltзначит> (больше чем) и <(меньше чем).

Вы можете посмотреть здесь для получения дополнительной информации об операторах:

Вопросительный знак
источник