zsh tamamen bash uyumlu değil. Çeşitli farklılıklar var. Daha yeni zsh bash ile daha uyumludur (= ~ desteklenir, yürütme şimdi ekstra bayrak seçeneklerine sahiptir, vb.) Ancak tam uyumluluk "öykünme" altında bile bir amaç değildir.
Örneğin, bash substring $ {foo: offset: len} 'dır, ancak zsh'de $ foo [start, end] ve bu sadece basit bir örnektir.
zsh, birçok şeyi kendi yöntemiyle yapan bir tcsh ve ksh etkilenmiş kabuktur; POSIX uyumluluğu açıkça bir amaç değildir, ancak geliştiriciler, POSIX'e yaklaşan seçenekler / taklit davranışlar ekleyen yamalar için duyarlıdır. Fakat gerçekten kabuğun gücüne girmeye başladığınızda, bashtan bile öte salt okunur komut dosyaları oluşturmaya başlarsınız.
bash POSIX sh + ksh + pedanticism'dir, bazı özellikler şimdi zsh'den kopyalanmıştır. Aynı zamanda sadece yazma komut dosyalarına sahiptir, ancak daha az güçlü operatörlere sahip olduğu için, zsh'ın özlülüğünü kullanmazsınız ve işler daha okunabilir olabilir (boşlukların bölünmesini önlemek için yapılan alıntılar hariç, aptal ksh tarzı $ dizisi önce gelir) -dize-dizisi, dizinin tümü-öğeleri değil, vb.
Kısıtlı bir ortamda olmadığınız sürece, her iki kabuğun gücünden tam olarak faydalanan komut dosyaları yazmak (örneğin, bazı FS'lerin monte edilemeyeceği sistem rc komutları yazmak, vb.). İdeal olarak, başkalarının bakımını yapmalarını istiyorsanız, Bourne sh'de ifade etmemeniz gereken yeterince büyük bir şey için Perl / Python / Ruby / kullanın. Kabuk malzemelerini etkileşimli kabukla ilgili şeyler için saklayın (sekme tamamlama programlaması vb.).
Ben zh üzerinden bash kullanmam. Basit betikler için zsh üzerinde çıplak sh kullanır veya ilişkisel dizilerin iyi işleçleri olan bir dile geçerim (zsh'den farklı olarak, 'özlü' oldukları yerde). Ben belki ben küçük bir özellik mevcut bir kanıtlanmış çalışan senaryoyu uzatmak için ve şimdi yeniden yazmak için zaman yok gerekirse bash bir sh komut dosyası açın.