Secara historis, testperintah itu ada terlebih dahulu (setidaknya sejauh Unix Seventh Edition pada 1979). Ini digunakan operator =dan !=untuk membandingkan string, dan -eq, -ne, -lt, dll untuk membandingkan angka. Misalnya, test 0 = 00itu salah, tetapi test 0 -eq 00itu benar. Saya tidak tahu mengapa sintaks ini dipilih, tetapi mungkin untuk menghindari menggunakan <dan >, yang shell akan diuraikan sebagai operator pengalihan. The testperintah mendapat sintaks lain beberapa tahun kemudian: [ … ]setara dengan test ….
The [[ … ]]sintaks kondisional, dalam yang <dan >dapat digunakan sebagai operator tanpa mengutip, ditambahkan kemudian, di ksh. Itu tetap kompatibilitas dengan [ … ], jadi itu menggunakan operator yang sama, tetapi ditambahkan <dan >untuk membandingkan string (misalnya, [[ 9 > 10 ]]tetapi [[ 9 -lt 10 ]]). Untuk informasi lebih lanjut, lihat menggunakan braket tunggal atau ganda - bash
Ekspresi aritmatika juga datang lebih lambat dari testperintah, di kulit Korn , pada suatu waktu di tahun 1980-an. Mereka mengikuti sintaks bahasa C, yang sangat populer di kalangan Unix. Jadi mereka menggunakan operator C: ==untuk persamaan, <=untuk kurang-atau-sama, dll.
Unix Seventh Edition tidak memiliki ekspresi aritmatika, tetapi memang memiliki exprperintah , yang juga menerapkan sintaks mirip C untuk operasi integer, termasuk operator pembandingnya. Dalam skrip shell, karakter <dan >harus dikutip untuk melindunginya dari shell, misalnya if expr 1 \< 2; …setara dengan if test 1 -lt 2; …. Penambahan ekspresi aritmatika ke shell memanfaatkan sebagian besar exprusang, sehingga tidak terkenal hari ini.
Dalam skrip sh, Anda biasanya akan menggunakan ekspresi aritmatika untuk menghitung nilai integer, dan [ … ]membandingkan integer.
if [ "$((x + y))" -lt "$z" ]; then …
Dalam skrip ksh, bash, atau zsh, Anda dapat menggunakan ((…))keduanya.
if ((x + y < z)); then …
The [[ … ]]Bentuk berguna jika Anda ingin menggunakan conditional melibatkan hal-hal lain selain bilangan bulat.
= != < <= > >=bandingkan string .1 -eq 01but1 != 01and8 -lt 42but8 > 42