Как функционирует оператор “\\<” в команде тест Bash?

Дни назад приятель университета комментировал мне, что в классе Программирования для Систем, где они показывают начала программирования в Bash и в языке C, они предложили ему следующий вопрос:

$ echo $SHELL
/bin/bash
$ [ 10 \< 5 ]
$ echo $?
0

Почему верное условие? И правда состоит в том, что я не сумел отвечать ему, потому что я не знаю, что он - оператор \< и я искал из-за документации команды test и из-за Google и я ничего не нахожу.

Кто-то умел бы отвечать ему?

3
задан 12.01.2017, 12:40
0 ответов

Это условие верное потому что \< служи для того, чтобы сравнить цепи. Из-за этого, сравнив 10 с 5 он закрепляется первый в первом символе каждой цепи и находит 1 и 5, а следовательно он определяет, что 10 он меньший, чем 5.

Давайте видеть стандартное использование этого оператора:

$ [ a \< b ] && echo "a es menor" || echo "b es menor"
a es menor
$ [ c \< b ] && echo "c es menor" || echo "b es menor"
b es menor

Если сравниваются числа, он оценивает их в соответствии с Вашим положением в таблице символов. Так, сравнив 10 с 2 он будет закреплен сначала в 1 и 2 и он определит, что 10 он меньший, чем 2:

$ [ 1 \< 2 ] && echo "1 es menor" || echo "2 es menor"
1 es menor
$ [ 3 \< 2 ] && echo "3 es menor" || echo "2 es menor"
2 es menor

Но:

$ [ 10 \< 2 ] && echo "10 es menor" || echo "2 es menor"
10 es menor

Это объясняет, что [ 10 \< 5 ] будьте оценен как верно:

$ [ 10 \< 5 ]
$ echo $?
0

Который, поскольку я показал в других примерах, мы можем санкционировать более графической формы с тройным оператором [ ] && si cierto || si falso:

$ [ 10 \< 5 ] && echo "10 es menor" || echo "5 es menor"
10 es menor

Если то, что ты хочешь, состоит в том, чтобы реализовывать сравнения чисел, используй:

operador  |  significado
--------------------
-eq       |  igual
-lt       |  menor estricto
-le       |  menor o igual
-gt       |  mayor estricto
-ge       |  menor o igual

Например:

$ [ 10 -lt 2 ] && echo "10 es menor" || echo "2 es menor"
2 es menor

Заметьте себе, что \< осуществи сравнения цепей в Bash, KoRn Shell, zsh. Не будь определен в POSIX, которым shell конечно он это не имел. (Ссылка).

4
ответ дан 03.12.2019, 17:44
  • 1
    Ты имеешь razó n, eliminé мой ответ, чтобы не вызывать confusió n. –  12.01.2017, 17:48

Теги

Похожие вопросы