
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 diff
pá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 0
significa true
para o shell, então "Same" é exibido. Em ambos os outros status possíveis, "Diferente" é exibido como qualquer coisa diferente de zero false
.
O if
comportamento é 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.