bat от рождения глючные, так что не надо ля-ля
Иногда весь код должен быть в одном файле, каким бы длинным он ни был.
неродной bash под windows
Это если не встречаются какие-то не те символы в именах файлов, например... ;-D
И у того и у другого - куча глюков и особенностей.
На счёт продуманной и предсказумой не соглашусь. Даже статьи есть про то как bash на разных системах может вести себя значительно по разному - даже хаки есть для переносимых bash-скриптов.
Да, в качестве эффекта высшего порядка малости он может учитывать свойства процесса которому принадлежит поток, но это вопрос не того уровня, где в ответе имеют значение подобные мелочи.
На курсах говорят, но именно и нужно ставить $() когда хочешь выполнить команду из терминал внутри скрипта, видать есть исключения.
$ whoami
user1
$ echo "Hello, $(whoami)"
Hello, user1
$ myname=$(whoami)
$ echo $myname
user1