A resposta curta é não, eles não são 100% compatíveis.
Mas a maioria dos shells é bem próxima do básico, então você raramente iria se deparar com inconsistências. Na verdade, a maioria das shells não diferem muito pela sintaxe adicionada, mas por alguns recursos extras, como conclusão de tabulação e similares.
Além disso, dash
é uma espécie de descendente de ash
- ou porta do BSD para o Linux, para ser preciso. E todos eles devem ser descendentes ou implementações diferentes de sh
. De fato, sh
está na maioria dos sistemas apenas um symlink para bash
, dash
ou outra coisa. O que importa é a conformidade POSIX - e quando você escreve scripts de acordo com os padrões, você não terá problemas.
A diferença entre essas camadas está nas otimizações e no desempenho. Eles são menos ricos em recursos que bash
, mas são totalmente legítimos. O Bash é rico em recursos para trabalhos interativos, mas usa mais memória, por exemplo.