今日は思わぬものを見ました。
$ bash -c 'false'
$ echo $?
1
これは予想通りです。
$ bash -c '[ false ]'
$ echo $?
0
ワット。
同様に:
$ if [ false ]; then echo 'true'; fi
true
test
aka[
がその引数を実行しないことは理解できたと思います。しかし... それは本当にそれで何をしますか?
これは、test
(実行するもの[
) がその引数を実行せず、理解できる演算子に従って評価するため!
=
!=
-a
-n
です。特に、演算子に一致しない文字列は、空の文字列と等しくないかどうかのテストになります。 . false
はそのような認識されない文字列であるため、空の文字列 (等しくない) と比較されるため、true
終了コードが返されます...
man test
すべてのオペレーターtest
が理解していることを示します。
if { false ; } ; then echo TRUE; fi
if ( false ) ; then echo TRUE; fi
if false ; then echo TRUE; fi
これらのフォームはすべて、false コマンドを実行します。
if [ false ] ; then echo TRUE; fi
if test false ; then echo TRUE; fi
これらは何も実行しません。
は[
組み込みコマンドと同義の bash 組み込みコマンドですtest
(これは とは異なり/usr/bin/test
ます)。最も基本的なテストは[ string ]
、文字列が null または空でない場合にどちらが真であるかという単純なものです。
拡張例はこちらにあります。
[
他のプログラムと同様に引数を処理しますが、たまたま戻り値を変更して、含まれている内容をより直接的に反映するだけです。man ページを調べると、正確に 2 つの引数 (この場合はfalse
と]
) を指定して実行すると、最初の引数が空ではなく、2 番目の引数が である場合に限り、ステータス コード 0 (true) で終了することがわかります]
。どちらも真なので、成功を返します。