Історично testкоманда існувала спочатку (принаймні, ще до сьомої редакції Unix у 1979 році). Раніше оператори =і !=порівняння рядків, і -eq, -ne, -ltі т.д. для порівняння чисел. Наприклад, test 0 = 00помилково, але test 0 -eq 00правда. Я не знаю, чому був вибраний цей синтаксис, але можливо, це було уникнути використання <та >, який оболонку розібрав би як операторів перенаправлення. Через testкілька років команда отримала ще один синтаксис: [ … ]еквівалентна test ….
[[ … ]]Умовний синтаксис, всередині якого <і >може бути використаний в якості операторів , не цитуючи, був доданий пізніше, в KSH. Він зберігав зворотну сумісність із [ … ], тому використовував ті самі оператори, але додав <і >для порівняння рядків (наприклад, [[ 9 > 10 ]]але [[ 9 -lt 10 ]]). Для отримання додаткової інформації див. Використання однієї або подвійної дужки - bash
Арифметичні вирази також з'явилися пізніше, ніж testкоманда, в оболонці Корна , якийсь час у 1980-х. Вони дотримувалися синтаксису мови С, який був дуже популярний у колах Unix. Таким чином, вони використовували оператори C: ==для рівності, <=для менших або рівних тощо.
У Unix сьомої редакції не було арифметичних виразів, але вона мала exprкоманду , яка також реалізувала C-подібний синтаксис для цілих операцій, включаючи оператори порівняння. У сценарії оболонки символи <та >їх потрібно було цитувати, щоб захистити їх від оболонки, наприклад if expr 1 \< 2; …, еквівалентно if test 1 -lt 2; …. Додавання арифметичних виразів до оболонки зробило більшість застосувань exprзастарілими, тому це невідомо сьогодні.
У скрипті sh ви зазвичай використовуєте арифметичні вирази для обчислення цілого значення та [ … ]для порівняння цілих чисел.
if [ "$((x + y))" -lt "$z" ]; then …
У сценарії ksh, bash або zsh ви можете використовувати ((…))і те, і інше.
if ((x + y < z)); then …
[[ … ]]Форма корисна , якщо ви хочете використовувати умовні з участю інших , ніж цілі речей.
= != < <= > >=порівняйте рядки .1 -eq 01але1 != 01і8 -lt 42але8 > 42