Коротка відповідь - ні, вони не на 100% сумісні.
Але більшість оболонок досить близькі до основних, тому ви рідко натикаєтесь на невідповідності. Насправді, більшість оболонок відрізняються не сильно за доданим синтаксисом, а за деякими додатковими функціями, такими як доповнення табуляції та подібне.
Крім того, dashце нащадок ash- або порт від BSD до Linux, якщо бути точним. І всі вони повинні бути нащадками чи різними реалізаціями sh. Насправді, shна більшості систем просто символічна посилання на bash, dashабо що - то ще. Важливим є відповідність POSIX - і коли ви пишете сценарії відповідно до стандартів, у вас не виникне проблем.
Різниця між цими оболонками полягає в оптимізації та продуктивності. Вони менш багаті на особливості bash, але вони є повністю законними оболонками. Bash багатий на можливості для інтерактивної роботи, але використовує більше пам'яті, наприклад.