diff 指令在 shell 腳本中的 if 語句上的行為方式

diff 指令在 shell 腳本中的 if 語句上的行為方式

我嘗試過以下程式碼..

if diff f1.sh f2.sh; then
  echo Same
else
  echo Different
fi

在這裡..就我而言f1.shf2.sh是不同的檔案..所以 if 語句列印不同的(正如預期的那樣)但是情況如何變成錯誤的並控制更改為 else 語句...它是如何發生的..條件如何變為假..?這個 diff 命令在這裡的行為方式.. 請深入解釋該過程.. 提前致謝(抱歉,如果我的英語太差了..)

答案1

這是設計使然。如果你查看diff手冊頁,你會看到這樣的聲明:

若輸入相同則退出狀態為 0,若不同則為 1,若有問題則為 2。

退出狀態0表示trueshell,因此顯示「相同」。在其他兩種可能的狀態中,「不同」顯示為任何非零值false

shell 手冊頁中描述了該if行為,例如bash

if list; then list; [ elif list; then list; ] ... [ else list; ] fi
  • if 清單被執行。如果其退出狀態為零,則列表為
    被執行。否則依序執行每個elif列表,如果其退出
    status 為零,則執行對應的 then 清單並執行指令
    完成。否則,將執行 else 清單(如果存在)。退出狀態
    是最後執行的指令的退出狀態,如果沒有條件則為零
    經測試屬實。

相關內容