シェルスクリプトの if ステートメントで diff コマンドがどのように動作するか

シェルスクリプトの if ステートメントで diff コマンドがどのように動作するか

次のコードを試しました。

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ます。truefalse

動作ifについてはシェルのマニュアル ページで説明されています。次に例を示しますbash

if list; then list; [ elif list; then list; ] ... [ else list; ] fi
  • ifリストが実行されます。終了ステータスが0の場合、thenリストが実行されます。
    それ以外の場合は、各elifリストが順番に実行され、終了した場合は
    ステータスがゼロの場合、対応するthenリストが実行され、コマンド
    完了しない場合は、elseリストが実行されます(存在する場合)。終了ステータス
    最後に実行されたコマンドの終了ステータス、または条件がない場合はゼロ
    真実であるとテストされました。

関連情報