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