zsh n'est pas totalement compatible bash. Il y a une variété de différences. Les nouveaux zsh sont plus compatibles avec bash (= ~ pris en charge, exec dispose maintenant des options de drapeau supplémentaires, etc.), mais la compatibilité totale n'est pas un objectif, même pas sous "émuler".
Par exemple, bash sous-chaîne est $ {foo: offset: len} mais en zsh, il s'agit de $ foo [début, fin] et ce n'est qu'un exemple simple.
zsh est un shell influencé par tcsh et ksh qui fait beaucoup de choses à sa manière; La compatibilité POSIX n’est pas explicitement un objectif, mais les développeurs réagissent aux correctifs qui ajoutent un comportement d’options / émulation qui rapprochent les choses de POSIX. Mais lorsque vous commencez vraiment à vous imprégner de la puissance du shell, vous commencez à créer des scripts en écriture seule, plus encore que bash.
bash est POSIX sh + ksh + pedanticism, avec certaines fonctionnalités maintenant copiées à partir de zsh. Il a aussi des scripts en écriture seulement mais comme il a des opérateurs moins puissants, vous finissez par ne pas utiliser la concision de zsh et les choses pourraient être plus lisibles (à l'exception de tous les guillemets pour éviter la séparation des espaces, le stupide tableau $ ksh-style signifie d'abord -element-of-array, pas tous les éléments-of-array, etc etc).
Il est déconseillé d’écrire des scripts qui tirent pleinement parti de la puissance de l’un ou de l’autre shell, sauf dans un environnement contraint (par exemple, l’écriture de scripts système rc, où certains systèmes de fichiers ne sont peut-être pas montés, etc.). En tant qu’idéal, utilisez Perl / Python / Ruby / any pour tout ce qui est assez gros pour que vous ayez besoin de l’expressivité, pas dans Bourne sh, si vous voulez que les autres puissent le maintenir. Conservez le contenu du shell pour les éléments relatifs au shell interactif (programmation de complétion par onglet, etc.).
Je n'utiliserais pas bash sur zsh. J'utilisais nu sh sur zsh pour des scripts simples, ou je passais dans un langage où les tableaux associatifs avaient des opérateurs décents (contrairement à zsh, où ils sont, encore une fois, "concis"). Je pourrais passer d'un script sh à bash si j'ai besoin de cette petite fonctionnalité pour étendre un script existant qui a fait ses preuves et si je n'ai pas le temps de le réécrire maintenant.