Bash oder Zsh, was ist der Unterschied, warum das eine oder das andere verwenden? [Duplikat]

Die Frage sagt also eigentlich schon alles. Ich arbeite mit Snow Leopard und mache viel Webentwicklung, insbesondere in Rails 3, das die Konsole stark nutzt.

Ich habe einige bemerkenswerte Blogger usw. gesehen, die Zsh als ihre Präferenz gegenüber Bash erwähnen, aber ich weiß nicht, welchen Unterschied es machen würde.

Könnte mir jemand einen guten Vergleich geben, welcher Unterschied besteht und warum man die eine oder andere Option bevorzugt?

Wenn das hilft, ein Artikel aus dem Jahr 2016: stackabuse.com/zsh-vs-bash
Diese Frage ist aufgrund der Umstellung von Äpfeln auf zsh erneut relevant geworden

Antworten (1)

Dies ist aus der Zsh-FAQ :

2.5: Ähnlichkeiten mit bash

Die Bourne-Again-Shell, bash, ist eine weitere verbesserte Bourne-ähnliche Shell; Der offensichtlichste
Der Unterschied zu zsh besteht darin, dass es nicht versucht, die Korn-Shell zu emulieren. Da beide
Shells in aktiver Entwicklung sind, ist es wahrscheinlich nicht sinnvoll, zu spezifisch zu sein
hier. Im Großen und Ganzen hat bash der Einhaltung von Standards (z. B. POSIX) mehr Aufmerksamkeit geschenkt
länger und hat bisher die abstruseren interaktiven Funktionen (programmierbare
Vervollständigung usw.), die zsh hat.

Ich habe sie beide verwendet, bevorzuge aber heutzutage Bash, weil die Maschinen, auf denen ich arbeite, standardmäßig konsistent bashen. Der Kommentar zur Einhaltung von Standards ist mir wichtig, da dies Konsistenz zwischen den Betriebssystemen bedeutet.

Zsh hat nette Fähigkeiten zur automatischen Vervollständigung, aber ich fand immer wieder Fälle, in denen es nicht wusste, was ich wollte. Das war vor einigen Jahren, also könnte es sich seitdem verbessert haben.

Ich habe festgestellt, dass das Aktivieren von "vi-mode" ( set -o vi) in Bash eine viel schönere Befehlszeilenumgebung als normalerweise macht, also mache ich das sofort in meiner .bashrcDatei.

Beim Schreiben von Shell-Skripten programmiere ich weder in bash noch in zsh – ich programmiere mit sh ( /bin/sh), da dies der kleinste gemeinsame Nenner ist und Kompatibilitätsprobleme am unwahrscheinlichsten sind. Das ist nur eine alte Angewohnheit, die mir gut getan hat.

Ein Unterschied besteht darin, dass sich Platzhalterzeichen anders verhalten. Um beispielsweise alle Instanzen von Dateien mit dem Namen "vi" zu finden, kann man bash mit dem Befehl verwenden locate */vi. Bei Verwendung von zsh ist das Ergebnis für denselben Befehl zsh: no matches found: */vi. Damit die Suche in zsh funktioniert, muss die Suchanfrage in Anführungszeichen wie locate "*/vi".
Aber beide Ihrer Beispiele funktionieren in Bash.