違いは何ですか:
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