
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 diff
pá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 0
significa true
para 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 if
comportamiento 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.