BG / FG внутри цикла командной строки

Ctrl-Z (^ Z) действует таким образом, я не понимаю, когда это делается внутри цикла, выполняемого из терминала.

Скажи я типа

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

затем я ударил ^ z. Я получу:

[1]+  Stopped                 sleep 1

Я могу возобновить работу, используя fg или bg, но работа относится только к команде сна. Остальная часть цикла, по-видимому, исчезла, и на терминале больше не появляется номер.

Я мог бы использовать & после команды, чтобы немедленно запустить ее в фоновом режиме, или другое решение - обернуть все это в подоболочку:

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

тогда ^ z дает мне

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

Эту работу можно возобновить, и все счастливы. Но я обычно не имею привычки делать это при выполнении одноразовой задачи, и вопрос, который я задаю, заключается в том, почему первое поведение происходит в первую очередь. Есть ли способ приостановить цикл командной строки, который не является subshell'd? А что случилось с остальной частью цикла в первом примере?

Обратите внимание, что это относится к циклу:

echo 1; sleep 5; echo 2

и удар ^ z во время сна вызываетecho 2 выполнить:

1
^Z
[2]+  Stopped                 sleep 5
2

Или я должен просто привыкнуть использовать & и назвать это темной магией?

Ответы на вопрос(1)

Ваш ответ на вопрос