zsh non è completamente compatibile con bash. Ci sono una varietà di differenze. Il nuovo zsh è più compatibile con bash (= ~ supportato, exec ora ha le opzioni flag extra, ecc.) Ma la piena compatibilità non è un obiettivo, nemmeno sotto "emula".
Ad esempio, la sottostringa bash è $ {foo: offset: len} ma in zsh è $ foo [inizio, fine] e questo è solo un semplice esempio.
zsh è una shell influenzata da tcsh e ksh che fa molte cose a modo suo; La compatibilità POSIX non è esplicitamente un obiettivo, ma gli sviluppatori sono sensibili alle patch che aggiungono opzioni / emulano il comportamento che avvicina le cose a POSIX. Ma quando inizi davvero a prendere il potere della shell, inizi a creare script di sola scrittura, più che con bash.
bash è POSIX sh + ksh + pedanticismo, con alcune funzionalità ora copiate da zsh. Anch'esso ha script di sola scrittura ma poiché ha operatori meno potenti, si finisce per non usare la concisione di zsh e le cose potrebbero essere più leggibili (tranne per tutte le citazioni per evitare la divisione degli spazi bianchi, lo stupido $ array in stile ksh significa prima -elemento-di-matrice, non tutti-elementi-di-matrice, ecc. ecc.).
Scrivere script che sfruttano appieno la potenza di entrambe le shell non è saggio, a meno che non ci si trovi in un ambiente limitato (ad esempio, scrivere script di sistema rc, dove alcuni FS potrebbero non essere montati, ecc.). Come ideale, usa Perl / Python / Ruby / qualunque cosa per qualcosa di abbastanza grande da aver bisogno dell'espressività non in Bourne sh, se vuoi che gli altri siano in grado di mantenerlo. Conserva le cose della shell per cose relative alla shell interattiva (programmazione del completamento delle schede, ecc.).
Non userei bash su zsh. Userei bare sh over zsh per semplici script, o passerei a una lingua in cui gli array associativi hanno operatori decenti (a differenza di zsh, dove sono, di nuovo, "concisi"). Ho potuto passare uno script sh a bash se ho bisogno che una caratteristica poco per estendere uno script collaudato di lavoro esistente e non hanno il tempo di riscrivere ora.