
次のコードを試しました。
if diff f1.sh f2.sh; then
echo Same
else
echo Different
fi
ここで...私の場合は両方f1.shそしてf2.sh異なるファイルです。したがって、if文は次のように出力します。違う(予想通り)しかし、その状態が間違い制御がelseステートメントに変わります...どのように発生しますか...条件がfalseになるのはなぜですか...このdiffコマンドはここでどのように動作しますか...プロセスを詳しく説明してください。よろしくお願いします(英語が下手だったらごめんなさい)
答え1
これは設計によるものです。マニュアル ページを見るとdiff
、次の記述があります。
入力が同じ場合は終了ステータスは 0、異なる場合は 1、問題がある場合は 2 になります。
終了ステータスはシェルを意味するため、「同じ」が表示されます。他の両方の可能なステータスでは、ゼロ以外の値はすべて「異なる」と表示され0
ます。true
false
動作if
についてはシェルのマニュアル ページで説明されています。次に例を示しますbash
。
if list; then list; [ elif list; then list; ] ... [ else list; ] fi
ifリストが実行されます。終了ステータスが0の場合、thenリストが実行されます。 それ以外の場合は、各elifリストが順番に実行され、終了した場合は ステータスがゼロの場合、対応するthenリストが実行され、コマンド 完了しない場合は、elseリストが実行されます(存在する場合)。終了ステータス 最後に実行されたコマンドの終了ステータス、または条件がない場合はゼロ 真実であるとテストされました。