diff 的退出代碼

diff 的退出代碼

如果我diff -q在兩個文件上運行並且它們相同,則生成的退出代碼echo $?0;如果文件不同,則退出代碼為1。這是為什麼?怎麼說第一個是diff成功的,第二個是失敗的?

我根據我的閱讀和有限的理解使用了“成功”和“失敗”這兩個術語http://mywiki.wooledge.org/BashGuide/TestsAndConditionals:

  1. 退出狀態
    每個指令在終止時都會產生退出代碼。
    任何啟動它的應用程式都會使用此退出代碼來評估
    一切是否正常。該退出程式碼就像
    函數的回傳值。它是 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.

將退出值稱為「成功」和「失敗」是一種自我限制的選擇。

相關內容