1

今日は思わぬものを見ました。

$ bash -c 'false'
$ echo $?
1 

これは予想通りです。

$ bash -c '[ false ]'
$ echo $?
0

ワット。

同様に:

$ if [ false ]; then echo 'true'; fi 
true

testaka[がその引数を実行しないことは理解できたと思います。しかし... それは本当にそれで何しますか?

4

4 に答える 4

5

これは、test(実行するもの[) がその引数を実行せず、理解できる演算子に従って評価するため! = != -a -nです。特に、演算子に一致しない文字列は、空の文字列と等しくないかどうかのテストになります。 . falseはそのような認識されない文字列であるため、空の文字列 (等しくない) と比較されるため、true終了コードが返されます...

man testすべてのオペレーターtestが理解していることを示します。

于 2013-06-08T03:14:40.930 に答える
4
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

これらは何も実行しません。

于 2013-06-08T03:37:40.530 に答える
1

[組み込みコマンドと同義の bash 組み込みコマンドですtest(これは とは異なり/usr/bin/testます)。最も基本的なテストは[ string ]、文字列が null または空でない場合にどちらが真であるかという単純なものです。

拡張例はこちらにあります

于 2013-06-08T03:20:05.490 に答える
0

[他のプログラムと同様に引数を処理しますが、たまたま戻り値を変更して、含まれている内容をより直接的に反映するだけです。man ページを調べると、正確に 2 つの引数 (この場合はfalse]) を指定して実行すると、最初の引数が空ではなく、2 番目の引数が である場合に限り、ステータス コード 0 (true) で終了することがわかります]。どちらも真なので、成功を返します。

于 2013-06-08T03:20:09.817 に答える