Похоже, что оптимизация, и, похоже, это делает и черта:
Запуск
bash -c '( sleep 3)' & sleep 0.2 && ps #or with dash
как и более надежно:
strace -f -e trace=clone dash -c '(/bin/sleep)' 2>&1 |grep clone # 1 clone
показывает, что подоболочка пропущена, но если после дочернего процесса в подоболочке необходимо выполнить последующую работу, то подоболочка создается:
strace -f -e trace=clone dash -c '(/bin/sleep; echo done)' 2>&1 |grep clone #2 clones
Zsh и ksh делают еще один шаг вперед и (когда они видят, что это последняя команда в скрипте):
strace -f -e trace=clone ksh -c '(/bin/sleep; echo done)' 2>&1 |grep clone # 0 clones
они вообще не форкаются (= клонируются), исключая непосредственно в процессе оболочки.