Cuál es la diferencia entre && y; cuando bifurca el sueño al background?

Acabo de hacer una pregunta sobre cómo hacer un process para dormir en el background.
La notación que se me ocurrió a mí se ve así:

sleep 10 && echo "hello world" & 

Esta respuesta a una pregunta diferente utiliza un formatting diferente.

 ( sleep 10 ; echo "hello world" ) & 

Sé que && solo permite que comience el segundo process si el primero devuelve verdadero. ¿Puede dormir? ¿Hay una situación en la que preferiría una sobre la otra?

El sueño puede fallar si finaliza durante la ejecución:

 $ sleep 2 $ echo "$?" 0 $ sleep 2 ^C $ echo "$?" 130 

Como sleep es un ejecutable externo, también es concebible que las llamadas fork o exec puedan fallar, lo que también causaría que bash genere un código de error> 0.

a; b a; b ejecuta siempre el segundo command después del primero, mientras que a && b ejecuta el segundo command solo si el primero tiene éxito, es decir, solo si el primer command devuelve el estado 0.

sleep siempre devuelve el estado 0, excepto cuando lo mata una señal, en cuyo caso el estado es 128 + número de señal. (El estado también puede ser 126 o 127 si el command de sleep no existe o el progtwig no puede iniciarse debido a la falta de resources, pero es muy poco probable que encuentre estos casos).

Por lo tanto, debes usar ; o && dependiendo de lo que quiera que suceda si se interrumpe el sueño:

  • sleep 10; echo hello sleep 10; echo hello imprime el post después de 10 segundos (less si el sleep es cancelado por una señal);
  • sleep 10 && echo hello imprime el post después de 10 segundos, pero no imprime nada si el sleep se apaga por una señal.

Debe suponer que cualquier command puede fallar por varias razones, incluso si no es probable que falle el sueño.

 ( sleep 10 ; echo "hello world" ) & 

significa dormir en segundo plano y ejecutar el eco después del process de dormir, pero si el sueño falla, el eco se ejecutará de todos modos, vea la explicación completa

 sleep 10 && echo "hello world" & 

significa que debe esperar el final de la suspensión antes de hacer eco de cualquier cosa, y si el eco falla, el process se detiene, pero también todo el command está en segundo plano. ver explicación completa

Conclusión
la primera syntax es shell script, lo que significa que está considerando las instrucciones por separado como una list.
La segunda opción usa && significa AND, por lo tanto, si la usa iof el primer command falla, la segunda no se ejecutará.

Este es solo un comportamiento diferente en el event handling errores.