Вы можете найти определение -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 ]
), которые не могут иметь перенаправления внутри, поэтому <
не нужно заключать в кавычки.
echo
утверждения в коде отвечают на ваш вопрос.