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