歴史的に、test
コマンドは最初に存在しました(少なくとも1979年のUnix Seventh Editionにまでさかのぼります)。これは、演算子を使用=
して!=
文字列を比較するために、そして-eq
、-ne
、-lt
数字を比較するなど、。たとえば、test 0 = 00
はfalseですがtest 0 -eq 00
、trueです。この構文が選択された理由はわかりませんが、シェルがリダイレクト演算子として解析する<
andの使用を避けるためであった可能性があります>
。test
コマンドは、数年後、別の構文を得た:[ … ]
と同等ですtest …
。
[[ … ]]
条件構文、内側<
及び>
引用することなく演算子として使用することができるが、kshの中に、後添加しました。との後方互換性を維持した[ … ]
ため、同じ演算子を使用しましたが<
、>
文字列を比較および追加しました(たとえば、[[ 9 > 10 ]]
but [[ 9 -lt 10 ]]
)。詳細については、シングルまたはダブルブラケットの使用を参照してください-bash
1980年代のある時点で、Kornシェルではtest
、算術式もコマンドよりも後になりました。彼らはC言語の構文に従いました。これはUnix界で非常に人気がありました。したがって、彼らはCの演算子を使用しました:等式、以下、等==
<=
Unix Seventh Editionには算術式はありませんでしたが、比較演算子を含む整数演算用のCのような構文も実装したexpr
コマンドがありました。シェルスクリプトでは、文字<
と>
を引用符で囲んでシェルから保護する必要がありif expr 1 \< 2; …
ましたif test 1 -lt 2; …
。たとえば、と同等です。シェルへの算術式の追加により、ほとんど使用さexpr
れなくなったため、今日ではあまり知られていません。
shスクリプトでは、通常、算術式を使用して整数値を計算し、整数[ … ]
を比較します。
if [ "$((x + y))" -lt "$z" ]; then …
ksh、bash、またはzshスクリプトでは((…))
、両方に使用できます。
if ((x + y < z)); then …
この[[ … ]]
形式は、整数以外のものを含む条件を使用する場合に便利です。
= != < <= > >=
文字列を比較します。1 -eq 01
しかし1 != 01
、8 -lt 42
しかし8 > 42