今日は思わぬものを見ました。
$ bash -c 'false'
$ echo $?
1
これは予想通りです。
$ bash -c '[ false ]'
$ echo $?
0
ワット。
同様に:
$ if [ false ]; then echo 'true'; fi
true
testaka[がその引数を実行しないことは理解できたと思います。しかし... それは本当にそれで何をしますか?
これは、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) で終了することがわかります]。どちらも真なので、成功を返します。