2 つのファイルで実行しdiff -q
、それらが同一の場合、 によって生成される終了コードはecho $?
です0
。ファイルが異なる場合、終了コードは です。なぜでしょうか。最初のファイルはどのような点で成功で、2 番目のファイルは1
どのような点で失敗なのでしょうか。diff
私は「成功」と「失敗」という言葉を、私の読書と限られた理解に基づいて使いました。http://mywiki.wooledge.org/BashGuide/TestsAndConditionals:
- 終了ステータス
コマンドが終了するたびに、終了コードが生成されます。
この終了コードは、コマンドを開始したアプリケーションによって、
すべてがうまくいったかどうかを評価するために使われます。この終了コードは、関数からの戻り値のようなものです
。0 から 255 までの整数です (両端を含む)。慣例
により、0 は成功を示し、その他の数字は
何らかの失敗を示します。具体的な数字は完全にアプリケーションによって異なります、
何が間違っていたのかを正確に示唆するために使用されます。
man diff
開発者が使用する規則が明確になっている最後まで読むべきでした。
答え1
からman diff
:
入力が同じ場合は終了ステータスは 0、異なる場合は 1、問題がある場合は 2 になります。
これはそうではないかもしれないと率直に認める完全に標準的しかし終了コードは実際のルールというよりは「ガイドライン」と呼ぶべきもの。
この場合、標準から逸脱することでdiff
スクリプト内で簡単に実行できるようになります。
diff a b && echo "no difference" || echo "differences!"
grep
これは、何かが見つかった場合は 0 を終了し、何かが見つからない場合は 1 を終了するに似ています。 の 0 と 1 の間の方向を説明できませんdiff
。 C 標準のブール値の結果を採用したと想定しています。
それはあまり重要ではありません。単なる任意の数字です。
答え2
man diff
私たちに伝える
終了ステータス
The following exit values shall be returned:
0 No differences were found.
1 Differences were found.
>1 An error occurred.
終了値を「成功」と「失敗」と呼ぶことは、自己制限的な選択です。プログラムには、終了ステータス用に 0 から 255 までの値を持つ 8 ビットがあります。