cómo se comporta el comando diff en la declaración if en el script de shell

cómo se comporta el comando diff en la declaración if en el script de shell

Intenté seguir el código.

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

Aquí... En mi caso ambosf1.shyf2.shson archivos diferentes. Entonces, si se imprime la declaraciónDiferente(como se esperaba) Pero, ¿cómo se vuelve la condición?FALSOy el control cambia a la declaración else... ¿Cómo sucede? ¿Cómo la condición se vuelve falsa...? Cómo se comportan aquí estos comandos de diferenciación... Explique el proceso en profundidad... Gracias de antemano (lo siento si mi inglés es muy malo...)

Respuesta1

Esto es por diseño. Si miras la diffpágina del manual, verás esta declaración:

El estado de salida es 0 si las entradas son iguales, 1 si son diferentes, 2 si hay problema.

El estado de salida 0significa truepara el shell, por lo que se muestra "Igual". En los otros dos estados posibles, se muestra "Diferente" como cualquier valor distinto de cero false.

El ifcomportamiento se describe en la página del manual del shell, aquí por ejemplo bash:

if list; then list; [ elif list; then list; ] ... [ else list; ] fi
  • Se ejecuta la lista if. Si su estado de salida es cero, entonces la lista es
    ejecutado. De lo contrario, cada lista elif se ejecuta por turno, y si su salida
    El estado es cero, se ejecuta la lista correspondiente y se ejecuta el comando.
    completa. De lo contrario, se ejecuta la lista else, si está presente. El estado de salida
    es el estado de salida del último comando ejecutado, o cero si no hay condición
    probado verdadero.

información relacionada