bg / fg dentro de un bucle de línea de comando

ctrl-z (^ z) actúa de formas que no entiendo cuando se realiza dentro de un bucle ejecutado desde un terminal.

Di que escribo

for ii in {0..100}; do echo $ii; sleep 1; done

entonces presioné ^ z. Lo tendré:

[1]+  Stopped                 sleep 1

Puedo reanudar el trabajo usando fg o bg, pero el trabajo se refiere solo al comando sleep. El resto del bucle aparentemente ha desaparecido, y no aparecen más números en el terminal.

Podría usar & después del comando para ejecutarlo inmediatamente en segundo plano, u otra solución es envolver todo en una subshell:

( for ii in {0..100}; do echo $ii; sleep 1; done )

entonces ^ z me da

[1]+  Stopped                 ( for ii in {0..100};
do
    echo $ii; sleep 1;
done )

Este trabajo puede reanudarse y todos están felices. Pero generalmente no tengo la costumbre de hacer esto cuando ejecuto una tarea única, y la pregunta que hago es por qué el primer comportamiento ocurre en primer lugar. ¿Hay alguna manera de suspender un bucle de línea de comandos que no tiene subshell? ¿Y qué pasó con el resto del ciclo en el primer ejemplo?

Tenga en cuenta que esto es específico del bucle:

echo 1; sleep 5; echo 2

y presionar ^ z durante el sueño provoca laecho 2 ejecutar:

1
^Z
[2]+  Stopped                 sleep 5
2

¿O debería acostumbrarme a usar & y llamarlo magia oscura?

Respuestas a la pregunta(1)

Su respuesta a la pregunta