В Wiki Грега есть пост по адаптации bash-скриптов для Dash , в котором упоминается множество «bashisms» - дополнительных функций, которые не являются стандартными, но являются частью bash. Предотвращение этих ошибок может помочь сделать ваш сценарий более дружественным к различным средам. Это особенно отвечает на некоторые ваши вопросы. Например, да, есть операторы, которые отличаются (например ==), но есть стандартный набор Posix, который должен работать во всех средах.
Для более подробного ознакомления вы можете ознакомиться со стандартом Posix , которому должны соответствовать все оболочки. В частности, том о «Shell & Utilities».
Что мне кажется более сложным, чем различия оболочек, так это различия команд. Многие системы Linux имеют GNU find, но если вы пишете переносимый скрипт, не полагайтесь на свой собственный man find, потому что существует множество систем с BSD find, у которых есть другой набор функций. Если вы пишете сценарии для busybox, вы обнаружите, что есть разные версии с совершенно разными ncs. Это те вещи, которые меня всегда привлекают, когда я развертываю скрипт в разных средах.
Для дополнительного чтения о хороших методах написания сценариев в оболочке, есть также хороший ресурс в блоге Дэвида Пашли: Написание надежных сценариев Bash Shell
Также обязательно прочитайте ответы и комментарии Жиля на этом сайте. У него много советов о том, чтобы убедиться, что вы используете переносимый код.