Я писал сценарий bash, и вдруг это поведение началось:
[[ 1 < 2 ]]; echo $? # outputs 0
[[ 2 < 13 ]]; echo $? # outputs 1
но -lt
работает добротно
[[ 1 -lt 2 ]]; echo $? # outputs 0
[[ 2 -lt 13 ]]; echo $? # outputs 0
я случайно <
как-то перезаписал ?
Вот скрипт, который я написал, чтобы проверить это поведение:
#!/bin/bash
for a in {1..5}
do
for b in {1..20}
do
[[ $a < $b ]] && echo $a $b
done
echo
done
вот вывод:
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
1 10
1 11
1 12
1 13
1 14
1 15
1 16
1 17
1 18
1 19
1 20
2 3
2 4
2 5
2 6
2 7
2 8
2 9
2 20
3 4
3 5
3 6
3 7
3 8
3 9
4 5
4 6
4 7
4 8
4 9
5 6
5 7
5 8
5 9
изменения <
к -lt
в сценарии дает нормальный выход ( 5 10
показывает вверх, например).
Перезагрузка ничего не изменила.
Моя версия bash - GNU bash, версия 4.3.42 (1) -релиз (x86_64-pc-linux-gnu). Я на Ubuntu 15.10. Я не знаю, какая другая информация уместна здесь.
<
операцией вы выполняете сравнение строк, тогда как-lt
оператором является сравнение чисел. Если вы посмотрите на результаты, которые вы перечислили, вы поймете это. Численно 2 меньше 10, в алфавитном порядке, наоборот.Ответы:
Со
bash
страницы руководства .Судя по выводу, он работает так, как задумано.
источник
Как насчет:
Согласно http://www.tldp.org/LDP/abs/html/dblparens.html
источник
Во-первых,
[[
это не POSIX и его следует избегать.Во-вторых, если вы хотите использовать его
<
как часть арифметического теста, вы можете сделать это, но с другим синтаксисом:Или:
источник