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

0

Eu tentei seguir o código ..

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

Aqui .. No meu caso, tanto f1.sh quanto f2.sh são arquivos diferentes. Então, se a declaração imprime Diferente (como esperado) Mas como a condição se torna false e controla as alterações para outra instrução ... Como está acontecendo .. Como a condição se torna falsa ..? Como este diff comandos se comporta aqui .. Por favor, explique o processo em profundidade .. Obrigado antecipadamente (desculpe se o meu inglês é muito ruim ..)

    
por Yuvaraj 09.08.2016 / 09:44

1 resposta

4

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.
por 09.08.2016 / 11:31