如果我diff -q
在兩個文件上運行並且它們相同,則生成的退出代碼echo $?
為0
;如果文件不同,則退出代碼為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.
將退出值稱為「成功」和「失敗」是一種自我限制的選擇。