条件付き動作が空の場合

条件付き動作が空の場合

違いは何ですか:

if echo " T " | grep -q " F "; then echo FOUND; else echo NOT; fi

そして:

if ""; then echo FOUND; else echo NOT; fi

最初のコマンドの出力は次のようになります。

NOT

2番目のコマンドの出力は次のとおりです。

: command not found 
NOT

私は両方とも同じように振る舞うべきだと思います。

答え1

: command not found

これは、ifステートメントで条件として指定されたコマンドが見つからないことを意味します。コマンドは""空の文字列なので、そのコマンドが見つかりません。

Bashのマニュアルページによると、if文の構文は次のようになります。

if list; then list; [ elif list; then list; ] ... [ else list; ] fi

リスト&、&&、または||演算子の 1 つで区切られ、オプションで;、&、 or のいずれかで終わる 1 つ以上のパイプシーケンス。

したがって、上記のifステートメントではリストが実行され、終了コード127が返され、コマンドが見つからないというエラーが発生します。その後、値はfalseと評価され、elseブロックが実行されます。


おそらくあなたが望むものは次のとおりです。

if false; then echo FOUND; else echo NOT; fi

関連情報