Zsh не полностью совместим с Bash. Есть множество отличий. Более новый zsh более совместим с bash (= ~ поддерживается, exec теперь имеет дополнительные опции флагов и т. Д.), Но полная совместимость не является целью, даже в разделе «emulate».
Например, подстрока bash - это $ {foo: offset: len}, но в zsh это $ foo [start, end], и это всего лишь один простой пример.
zsh - это оболочка, на которую влияют tcsh и ksh, которая делает многие вещи по-своему; Совместимость с POSIX явно не является целью, но разработчики реагируют на патчи, которые добавляют параметры / эмулируют поведение, приближающее POSIX. Но когда вы действительно начинаете понимать мощь оболочки, вы начинаете создавать сценарии только для записи, даже больше, чем bash.
bash - это POSIX sh + ksh + pedanticism, некоторые функции теперь скопированы из zsh. Он также имеет сценарии только для записи, но поскольку он имеет менее мощные операторы, вы в конечном итоге не используете краткость zsh, и все может быть более читабельным (за исключением всех кавычек, чтобы избежать разделения пробелов, глупый массив $ ksh-style означает сначала -элемент-массив, не все-элементы-массив и т. д. и т. д.).
Написание сценариев, которые в полной мере используют возможности любой оболочки, нецелесообразно, если только вы не находитесь в стесненной среде (например, написание системных rc-сценариев, где некоторые FS могут быть не смонтированы и т. Д.). В идеале, используйте Perl / Python / Ruby / что угодно для чего-то достаточно большого, чтобы вам нужна выразительность не в Bourne sh, если вы хотите, чтобы другие могли ее поддерживать. Сохраняйте содержимое оболочки для вещей, относящихся к интерактивной оболочке (программирование завершения вкладок и т. Д.).
Я бы не использовал Bash над Zsh. Я бы использовал голый sh над zsh для простых сценариев или переключился бы на язык, где ассоциативные массивы имеют достойные операторы (в отличие от zsh, где они, опять же, «кратки»). Я мог бы переключить сценарий sh на bash, если мне нужна эта небольшая функция для расширения существующего проверенного сценария, и у меня нет времени переписывать его сейчас.