zsh tidak sepenuhnya kompatibel dengan bash. Ada berbagai perbedaan. Zsh yang lebih baru lebih kompatibel dengan bash (= ~ didukung, exec sekarang memiliki opsi bendera tambahan, dll) tetapi kompatibilitas penuh bukan tujuan, bahkan di bawah "meniru".
Misalnya, substring bash adalah $ {foo: offset: len} tetapi di zsh itu $ foo [start, end] dan itu hanya satu contoh sederhana.
zsh adalah shell yang dipengaruhi tcsh dan ksh yang melakukan banyak hal dengan caranya sendiri; Kompatibilitas POSIX secara eksplisit bukan tujuan, tetapi pengembang responsif terhadap tambalan yang menambahkan opsi / meniru perilaku yang membuat segalanya lebih dekat dengan POSIX. Tetapi ketika Anda mulai benar-benar memahami kekuatan shell, Anda mulai membuat skrip tulis saja, bahkan lebih dari bash.
bash adalah POSIX sh + ksh + pedanticism, dengan beberapa fitur sekarang disalin dari zsh. Juga memiliki skrip tulis-saja tetapi karena memiliki operator yang kurang kuat, Anda akhirnya tidak menggunakan keringkasan zsh dan hal-hal mungkin lebih mudah dibaca (kecuali untuk semua kutipan untuk menghindari perpecahan spasi putih, $ array bodoh ksh-style $ berarti lebih dulu -element-of-array, bukan semua-elemen-of-array, dll.)
Menulis skrip yang memanfaatkan sepenuhnya kekuatan shell tidak bijaksana, kecuali Anda berada di lingkungan yang dibatasi (mis., Menulis skrip sistem rc, di mana beberapa FSs mungkin tidak dipasang, dll). Sebagai ideal, gunakan Perl / Python / Ruby / apa pun untuk sesuatu yang cukup besar yang Anda butuhkan ekspresif tidak di Bourne sh, jika Anda ingin orang lain dapat mempertahankannya. Simpan barang-barang shell untuk hal-hal yang berkaitan dengan shell interaktif (pemrograman penyelesaian tab, dll).
Saya tidak akan menggunakan bash over zsh. Saya akan menggunakan bsh sh over zsh untuk skrip sederhana, atau beralih ke bahasa di mana array asosiatif memiliki operator yang layak (tidak seperti di zsh, di mana mereka, sekali lagi, 'ringkas'). Saya mungkin mengganti skrip sh ke bash jika saya membutuhkan satu fitur kecil untuk memperpanjang skrip yang sudah terbukti bekerja dan tidak punya waktu untuk menulis ulang sekarang.