O zsh não é totalmente compatível com o bash. Existem várias diferenças. O zsh mais recente é mais compatível com o bash (= ~ supported, exec agora possui as opções extra flag, etc), mas a compatibilidade total não é uma meta, nem mesmo em "emular".
Por exemplo, a substring bash é $ {foo: offset: len}, mas em zsh é $ foo [start, end] e isso é apenas um exemplo simples.
zsh é um shell influenciado por tcsh e ksh que faz muitas coisas do seu jeito; A compatibilidade POSIX não é explicitamente uma meta, mas os desenvolvedores respondem a patches que adicionam opções / emulam comportamentos que aproximam as coisas do POSIX. Mas quando você começa realmente a entrar no poder do shell, você começa a criar scripts somente para escrita, mais até do que o bash.
bash é o POSIX sh + ksh + pedantismo, com alguns recursos agora copiados do zsh. Ele também tem scripts somente de escrita, mas porque tem operadores menos poderosos, você acaba não usando a concisão do zsh e as coisas podem ser mais legíveis (exceto por todas as citações para evitar a divisão do espaço em branco, o < em> estúpido ksh-style $ array significa first-element-of-array, não all-elements-of-array, etc etc).
Escrever scripts que tiram o máximo proveito do poder de qualquer shell é imprudente, a menos que você esteja em um ambiente restrito (por exemplo, escrevendo scripts rc do sistema, onde alguns FSs podem não ser montados, etc). Como um ideal, use Perl / Python / Ruby / o que for para algo grande o suficiente para que você precise de expressividade não em Bourne sh, se você quiser que outros possam mantê-lo. Mantenha o material da shell para coisas relacionadas ao shell interativo (programação de conclusão de tabulação, etc.).
Eu não usaria o bash sobre o zsh. Eu usaria sh simples sobre zsh para scripts simples, ou mudaria para uma linguagem onde os arrays associativos tivessem operadores decentes (ao contrário de zsh, onde eles são, novamente, 'concisos'). Eu posso mudar um script sh para bash se eu precisar desse pequeno recurso para estender um script já existente e não ter tempo para reescrevê-lo agora.