como o comando diff se comporta na instrução if no shell script

como o comando diff se comporta na instrução if no shell script

Eu tentei seguir o código ..

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

Aqui.. No meu caso ambosf1.shef2.shsão arquivos diferentes. Então, se a instrução for impressaDiferente(como esperado) Mas como a condição se tornafalsoe controle as mudanças para a instrução else... Como isso está acontecendo.. Como a condição se torna falsa..? Como este comando diff se comporta aqui.. Por favor, explique o processo em detalhes.. Agradecemos antecipadamente (desculpe se meu inglês é muito ruim..)

Responder1

Isso ocorre intencionalmente. Se você olhar a diffpágina de manual, verá esta declaração:

O status de saída é 0 se as entradas forem iguais, 1 se forem diferentes, 2 se houver problema.

O status de saída 0significa truepara o shell, então "Same" é exibido. Em ambos os outros status possíveis, "Diferente" é exibido como qualquer coisa diferente de zero false.

O ifcomportamento é descrito na página de manual do shell, aqui, por exemplo bash:

if list; then list; [ elif list; then list; ] ... [ else list; ] fi
  • A lista if é executada. Se seu status de saída for zero, a lista then será
    executado. Caso contrário, cada lista elif é executada por vez, e se a sua saída
    status é zero, a lista then correspondente é executada e o comando
    completa. Caso contrário, a lista else será executada, se presente. O estado de saída
    é o status de saída do último comando executado ou zero se não houver condição
    testado verdadeiro.

informação relacionada