«Условное выражение» - это то, что используется внутри теста
[
или [[
] команды.
Итак, оба ваших вопроса 1 и 2 означают одно и то же:
Однако они не означают то, что вы думаете:
$ if [[ 1 < 2 ]]; then echo yes; else echo no; fi
yes
$ if [[ 10 < 2 ]]; then echo yes; else echo no; fi
yes
$ if [[ e < è ]]; then echo yes; else echo no; fi
yes
Это сравнение, как указано в руководстве:
True if string1 sorts before string2 lexicographically.
То есть: в порядке словаря (и зависит от переменной LC_COLLATE)
Тест с простым [
перенаправит вывод в файлы:
$ if [ e < è ]; then echo h; else echo b; fi
bash: è: No such file or directory
b
Чтобы заставить его работать, вам нужно использовать обратную косую черту (процитируйте <и>):
$ if [ e \< è ]; then echo h; else echo b; fi
h
Но я не рекомендую использовать <в тесте
.
В другом месте, где могут использоваться <, <=,>,> =, находятся внутри арифметических тестов, которые могут быть частью теста if:
$ if (( 12 <= 15 )); then echo "yes"; fi
yes
Что, да, эквивалентно:
$ if [[ 12 -le 15 ]]; then echo "yes"; fi
yes
И вполне аналогично:
$ if [ 12 -le 15 ]; then echo "yes"; fi
yes
Итак, да, все это:
<= >= < > comparison
== != equality and inequality
&& logical AND
|| logical OR
Используются для условных выражений внутри арифметических выражений:
$ if (( ( ((2<3)&&(3>7)) * 18 ) == 0 )); then echo "yes"; fi
yes
Это не те же условные выражения, что и внутри команды test
.