Isso é por design. Se você olhar para a página de manual diff
, verá esta declaração:
Exit status is 0 if inputs are the same, 1 if different, 2 if trouble.
Sair do status 0
significa true
para o shell, então "Same" é exibido. Nos dois outros status possíveis, "Diferente" é exibido como qualquer coisa diferente de zero é false
.
O comportamento if
é descrito na página de manual do shell, aqui por exemplo bash
:
if list; then list; [ elif list; then list; ] ... [ else list; ] fi
-
The if list is executed. If its exit status is zero, the then list is executed. Otherwise, each elif list is executed in turn, and if its exit status is zero, the corresponding then list is executed and the command completes. Otherwise, the else list is executed, if present. The exit status is the exit status of the last command executed, or zero if no condition tested true.