歴史的に、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