[
引数に含まれるexpressionが真であると見なされる場合、コマンドは終了ステータス0を返し、引数に含まれるexpressionが偽であると見なされる場合、ゼロ以外の終了ステータスを返します。また、最後の引数がそうでない場合はエラーメッセージで失敗します]
(これは純粋に審美的な理由で行われます)。
例えば:
[ hello ]
echo "Exit-status of [ hello ] is:" $?
[ abc = abc ]
echo "Exit-status of [ abc = abc ] is:" $?
[ ]
echo "Exit-status of [ ] is:" $?
[ abc = def ]
echo "Exit-status of [ abc = def ] is:" $?
…出力されます:
[ハロー]の[終了ステータスは以下のとおりです。0 -非空の文字列が真であると見なされているため
の出口状態[ABC = ABC]である:0 - 「ABC」は本当に「ABC」と同じであるため
] [の出口ステータスです:1 —空の文字列はfalseと見なされるため
[abc = def]の終了ステータスは次のとおりです。1 — 'abc'は実際には 'def'と異なるため
ただし、bashや他の多くのシェルは通常、これらのケースでは実際には呼び出し/bin/[
(または/usr/bin/[
)せず、代わりにまったく同じ動作で組み込みコマンドを呼び出します(純粋にパフォーマンス上の理由から)。/bin/[
(シェルの組み込みサロゲートではなく)を呼び出すには、パスを明示的に指定する必要があります(例:/bin/[ hello ]
;を]
介してdirname をプレフィックスする必要はありません)、または組み込みのサロゲートを使用しないようにシェルを構成する(たとえば、enable -n [
bash)。
PS:他の回答で言われたように、[
に関連していtest
ます。しかしtest
、とは異なり[
、]
最後の引数としては必要ありません(まったく期待していません; 引数に余分なもの]
を追加test
すると、エラーメッセージで失敗したり、間違った結果を返すことがあります)。同じファイルに解決することができます(例えば、1つされるシンボリックリンクが、この場合には、行動の転換は、おそらくによって実現され、現在と呼ばれるコマンドを分析中に/のコード自体)、または別のファイルに。の場合、シェルは通常、パスが明示的に指定されている()か、そうでないように構成されていない限り()組み込みのサロゲートを呼び出します(/bin/test
/bin/[
test
[
test
/bin/test
enable -n test
)。
PPS:test
およびとは異なり[
、modern if
は実際のファイルではありません。これはシェル(bashなど)構文の一部です:(if commandA; then commandB; fi
セミコロンの代わりに改行を使用できます)ステータスがゼロで終了したcommandB
if-and-only-ifが実行されcommandA
ます。これは、test
またはの動作に完全に適合し[
、それらをif [ "$a" = foo ]; then …; fi
(またはif test "$a" = foo; then …; fi
-読みにくく)組み合わせることを可能にします。ただし、最近のスクリプト[[
では、test
またはの代わりに[
(としてif
)実際のファイルではなく、常にシェル構文の一部として使用されることがよくあります。
PPPS:に関してはman
— man
ファイルシステムのすべてのコマンドに関する記事があるとは思わないでください。いくつかの(でも「リアル」、ファイルベース)コマンドは、特定のシェルに専用の物品内に多分存在するだけでなく、いくつかのシェル組み込みコマンドについての情報が欠落することができる(あなたが最も確かに情報を見つけるだろう場所ですその上の情報test
、[
、if
、[[
)。それでも、多くのディストリビューションにはman
、test
との明示的な記事があり[
ます。(約--help
、それtest
は明白な理由で認識されません:のような静かなケースを処理する必要がありますa=--help; test "$a"
;いくつかのディストリビューションでは[ --help
(閉じることなく]
)まだ助けを示しますが、そうでないものもあります。)
[
を指しtest
、かかわらコマンドではないexpr
、それはする必要がありますので、man test