Historycznie testkomenda istniała jako pierwsza (przynajmniej jeszcze w 7. edycji Unix w siódmej edycji ). Stosowany operatorów =i !=porównać strun, i -eq, -ne, -lt, itd., Aby porównać numery. Na przykład test 0 = 00jest fałszywy, ale test 0 -eq 00jest prawdziwy. Nie wiem, dlaczego wybrano tę składnię, ale być może trzeba było unikać używania <i >, które powłoka analizowałaby jako operatory przekierowania. testPolecenie dostał inną składnię kilka lat później: [ … ]jest równoważna test ….
[[ … ]]Składni warunkowe, wewnątrz której <i >może być stosowany jako podmiotów bez podania dodano później, w KSH. Zachował kompatybilność wsteczną [ … ], więc używał tych samych operatorów, ale dodawał <i >porównywał ciągi znaków (na przykład, [[ 9 > 10 ]]ale [[ 9 -lt 10 ]]). Aby uzyskać więcej informacji, zobacz używanie pojedynczego lub podwójnego nawiasu klamrowego
Wyrażenia arytmetyczne pojawiły się później niż testpolecenie, w powłoce Korna , w pewnym momencie w latach 80. Postępowali zgodnie ze składnią języka C, który był bardzo popularny w kręgach uniksowych. Dlatego używali operatorów C: ==dla równości, <=dla mniejszej lub równej itp.
Unix Siódma Edycja nie miała wyrażeń arytmetycznych, ale miała exprkomendę , która również implementowała składnię podobną do C dla operacji na liczbach całkowitych, w tym operatorów porównania. W skrypcie powłoki znaki <i znaki >muszą być cytowane, aby chronić je przed powłoką, np. if expr 1 \< 2; …Jest równoważne if test 1 -lt 2; …. Dodanie wyrażeń arytmetycznych do powłoki spowodowało, że większość zastosowań była exprprzestarzała, więc nie jest ona dziś dobrze znana.
W skrypcie sh zwykle używasz wyrażeń arytmetycznych do obliczania wartości liczb całkowitych i [ … ]do porównywania liczb całkowitych.
if [ "$((x + y))" -lt "$z" ]; then …
W skrypcie ksh, bash lub zsh możesz używać ((…))obu.
if ((x + y < z)); then …
[[ … ]]Forma jest przydatna, jeśli chcesz skorzystać z udziałem warunkowe rzeczy inne niż liczb całkowitych.
= != < <= > >=porównaj ciągi .1 -eq 01ale1 != 01i8 -lt 42ale8 > 42