回答:
もしあなたがそうするなら
$ ksh -n 'if [[ 1 -eq 1 ]]; then echo hi; fi'
あなたはメッセージを受け取ります
ksh: warning: line 1: -eq within [[...]] obsolete, use ((...))
あなたが見たように。今これを試してください:
$ ksh -n 'if (( 1 -eq 1 )); then echo hi; fi'
ksh: 1 -eq 1 : arithmetic syntax error
これは機能します:
$ ksh -n 'if (( 1 == 1 )); then echo hi; fi'
最初のメッセージは単なる警告であることに注意してください。そのフォームを引き続き使用できます。あまりにも多くの既存のスクリプトを壊してしまうので、削除されるとは思えません。ちなみに、これは警告なしに受け入れられます:
$ ksh -n 'if [ 1 -eq 1 ]; then echo hi; fi'
一つの主な理由、その二重括弧が好ましくは、比較演算子をよりよく理解していることである<
、<=
、==
、など、(少なくとも他の言語と比較した場合)。
二重括弧はBashとzshでも機能します。関連する形式の算術置換は、それらすべてで機能し、さらにPOSIXで指定されています。
$ a=$((3 * 4))
Korn、Bash、Zも次のように実行できます。
$ (( a = 3 * 4 ))
Dashは、POSIXシェルの例として、フォームif (( ... ))
での二重括弧比較をサポートしていませんが、算術置換を使用してそれらを実行できますが、結果は期待したものとは逆になります(これは、他人)。
$ 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