Jika kamu melakukan
$ ksh -n 'if [[ 1 -eq 1 ]]; then echo hi; fi'
Anda mendapatkan pesannya
ksh: warning: line 1: -eq within [[...]] obsolete, use ((...))
seperti yang kamu lihat. Sekarang coba ini:
$ ksh -n 'if (( 1 -eq 1 )); then echo hi; fi'
ksh: 1 -eq 1 : arithmetic syntax error
Ini bekerja:
$ ksh -n 'if (( 1 == 1 )); then echo hi; fi'
Ingat bahwa pesan pertama hanyalah peringatan. Anda dapat terus menggunakan formulir itu. Saya ragu bahwa itu akan dihapus karena akan merusak terlalu banyak skrip yang ada. Omong-omong, ini diterima tanpa peringatan:
$ ksh -n 'if [ 1 -eq 1 ]; then echo hi; fi'
Salah satu alasan utama yang ganda kurung lebih disukai adalah bahwa operator perbandingan adalah lebih akrab <, <=, ==, dll, (setidaknya bila dibandingkan dengan bahasa lain).
Tanda kurung ganda juga berfungsi di Bash dan zsh. Bentuk terkait, substitusi aritmatika, berfungsi di dalamnya, ditambah ditentukan oleh POSIX.
$ a=$((3 * 4))
Korn, Bash dan Z juga dapat melakukannya dengan cara ini:
$ (( a = 3 * 4 ))
Meskipun Dash, sebagai contoh shell POSIX, tidak mendukung perbandingan tanda kurung ganda dalam formulir if (( ... )), Anda masih dapat melakukannya dengan menggunakan substitusi aritmatika, tetapi hasilnya adalah kebalikan dari apa yang Anda harapkan (ini juga berlaku untuk yang lain).
$ echo $(( 1 == 1 )); (( 1 == 1 )); echo $? # in Dash, use true instead of the second statement
1
0
$ echo $(( 1 == 2 )); (( 1 == 2 )); echo $? # in Dash, use false instead of the second statement
0
1