Frage Einzigartige Eigenschaften von bash im Vergleich zu zsh


Ich war lange Zeit ein zsh-Benutzer (vor diesem tcsh und vor diesem csh). Ich bin ziemlich glücklich damit, aber ich frage mich, ob es irgendwelche zwingenden Eigenschaften von Bash gibt, die es in zsh nicht gibt. Und umgekehrt, gibt es zsh-Merkmale, die in bash nicht existieren. Mein derzeitiges Gefühl ist, dass bash besser ist:

  • Wenn Sie sich bereits damit auskennen und keine neue Syntax lernen wollen.
  • Es wird standardmäßig auf den meisten * nix-Rechnern existieren, während zsh eine zusätzliche Installation sein kann.

Ich versuche hier nicht, einen religiösen Kampf zu beginnen, deshalb suche ich nur nach Merkmalen, die nur in einer der Schalen existieren.


63
2018-05-05 20:38


Ursprung


Wie sind Merkmale, die für das eine oder andere subjektiv sind? Ich suche wirklich keinen Flammenkrieg und gestehe, dass die Vertrautheit des einen oder anderen wahrscheinlich ein guter Grund ist, diese Hülle zu bevorzugen. - Tim


Antworten:


Zsh ist für Vulcans. ;-)

Ernst: bash 4.0 hat einige Features, die bisher nur in zsh gefunden wurden, wie ** globbing:

% ls /usr/src/**/Makefile

ist äquivalent zu:

% find /usr/src -name "Makefile"

aber offensichtlich stärker.

Meiner Erfahrung nach ist die programmierbare Vervollständigung von bash etwas besser als die von zsh, zumindest in einigen Fällen (zum Beispiel die Fertigstellung von Debian-Paketen für aptitude).

Bash hat Alt + . einführen !$

zsh hat eine Erweiterung aller Variablen, so dass Sie z.

% rm !$<Tab>

dafür. zsh kann auch einen Befehl in Backtics erweitern, also

% cat `echo blubb | sed 's/u/a/'`<Tab>

Erträge

% cat blabb

Ich finde es sehr nützlich zu erweitern rm *, da Sie sehen können, was entfernt werden würde und möglicherweise eine oder zwei Dateien aus dem Befehl entfernen können, um zu verhindern, dass sie gelöscht werden.

Auch schön: Verwenden Sie die Ausgabe von Befehlen für andere Befehle, die nicht von stdin lesen, sondern einen Dateinamen erwarten:

% diff <(sort foo) <(sort bar)

Von dem, was ich lese, unterstützt bash-completion auch die Fertigstellung von Remote-Dateinamen über ssh, wenn Sie ssh-agent verwenden, was ein guter Grund war, zu zsh zu wechseln.

Aliase in zsh können so definiert werden, dass sie nicht nur am Anfang, sondern in der gesamten Zeile arbeiten:

% alias -g ... = "../ .."
% CD ...


40
2017-08-09 20:13



In der Bash, C-M-e zu "shell-expand-line", die erweitern würde cat `echo blubb | sed 's/u/a/'`  zu cat blabb und echo $SHELL zu echo /bin/bash in meinem Fall. Ebenfalls, C-x * zu "glob-expand-word", das sich erweitern würde rm *. - Victor


Ich möchte darauf hinweisen, dass bash nicht standardmäßig unter FreeBSD, OpenBSD oder NetBSD installiert ist und auch nicht standardmäßig unter Solaris 10 (OpenSolaris hat es als Standard), das letzte Mal, als ich einen AIX verwendet habe und oder HP-UX Server wurde es auch nicht standardmäßig installiert.

Auch auf OpenSolaris / bin / sh ist KEINE bash. Es ist ksh. Die größten Probleme, die ich als Software-Portier habe, sind Leute, die annehmen, dass / bin / sh bash ist und dass sie bash erweiterte Syntax akzeptieren wird. Während dies bei den meisten Linux-Distributionen der Fall zu sein scheint, ist dies anderswo nicht der Fall und es ist wirklich ärgerlich.


16
2018-05-24 00:40



Ja, du hast recht. Leider machen all diese Anbieter es sehr einfach, bash als zusätzliches Paket zu installieren. +1 für die Notwendigkeit von / bin / sh Purismus in Skripten. - kubanczyk
@ Kubanczyk: Wenn du an Computern arbeitest, auf die du keinen Root-Zugriff hast, dann ist es vielleicht nicht so einfach zu installieren, also denke ich, der Punkt von X-Isentance steht. (Ich arbeite an einer Reihe von Solaris-Boxen, und die Systemadministratoren sind alle Ksh-Junkies. Letztes Mal habe ich versucht, meine eigene Software zu kompilieren, ohne die ich nicht leben konnte. In diesem Fall gab es Mängel beim installierten Compiler, also sogar diese Route wurde mir abgeschnitten.) - iconoclast


Obwohl ich ein Bash-Benutzer bin, finde ich eine der Funktionen von Zsh ziemlich cool: RPS1.

Merken:

  • PS1: die linksbündige Aufforderung
  • RPS1: Die rechtsbündige Eingabeaufforderung

Probe:

Wenn Sie etwas wie

PS1=’%B(%h) %m%#%b ‘
RPS1=’(%20<…<%~)'

Sie erhalten Ihre Eingabeaufforderung auf der linken Seite und das aktuelle Verzeichnis auf der rechten Seite. Es verschwindet sogar, wenn die aktuelle Zeile zu lang wird! Das liegt daran, dass zsh intelligent genug ist, RPS1 eine niedrige Priorität zu geben.

Sie können einen Screenshot dieses Beispiels unter sehen http://imgur.com/OAZhC.


12
2017-11-25 13:31





Zsh hat Rechtschreibkorrektur. Wenn du einen Brief (oder mehr) hast, wird er herausfinden, was du gemeint hast.

Es hat auch robustere Tab-Vervollständigung, die ich mag.

Zsh hat ein interaktives Konfigurations-Dienstprogramm, um es so einzustellen, wie es dir gefällt.

Einige Geschwindigkeitstests sagen, dass zsh schneller ist, aber ich habe keinen Unterschied bemerkt.


9
2018-05-06 20:05



Eine abgespeckte Version des Dash, die nur eine Teilmenge seiner Funktionen unterstützt und für die Verwendung in Skripten gedacht ist, die schnell ausgeführt werden sollen (z. B. Startup-Skripts), ist der Bindestrich. - Chucky
zsh hat sogar eine Einstellung, um "einen Buchstaben aus" für Dvorak-Tastaturgebrauch zu verfälschen. - vgoff


Ich kenne keine Bash Features, die zsh nicht unterstützt. Das Designziel von zsh scheint die Unterstützung aller Funktionen zu sein, die bash hinzufügt.

Ich benutze immer noch bash statt zsh. Ich stoße selten auf fesselnde Features, die zsh unterstützt, nicht. Gelegentliche Probleme mit zsh im Laufe der Jahre oder in bestimmten Systemen nicht vorhanden, haben es sich nicht gelohnt, den Übergang zu machen.

Ich kann schließlich die gleiche Shell auf jedem Unix-System verwenden, es lohnt sich nicht, das für Features zu brechen, die ich nie benutzen werde.

Die Features in zsh, die in bash nicht vorhanden sind, scheinen meistens niedlich zu sein, aber keine, die von Tag zu Tag wichtig wären.


6
2018-05-24 00:14





bash hat viele Funktionen, die nur in zsh vorhanden waren. Sie können jetzt auch 'smart tab completion' mit bash haben, wie jeder neuere Ubuntu-Benutzer entdeckt hat.


3
2018-06-11 11:58





Prozesssubstitution und erweitertes Globbing sind die beiden Merkmale, die ich am meisten vermissen würde. Die Eingabeaufforderungseinstellungen sind auch ziemlich cool - die Verschachtelungsebene zu sehen, wenn Sie komplexe Anweisungen in die Befehlszeilen eingeben. Autoloading macht viele Funktionen in jeder Shell möglich.


1
2018-05-16 12:24



Ich nehme an, du meinst, du würdest die von zsh vermissen, da AFAIK alles, was du erwähnt hast, in zsh enthalten ist? (Aber bist du sicher, dass sie alle von der Bash abwesend sind? Das würde mich überraschen.) Jedenfalls würde das Hinzufügen deine Antwort klarer machen, da es Leute gibt, die auf beiden Seiten des Bash / Zsh-Zauns antworten. Es wäre auch hilfreich, wenn Sie Beispiele geben würden, wie jedes dieser Features Ihr Shell-Leben einfacher macht. - iconoclast


Ich bin ein Fan von zsh wegen der vi Modus Unterstützung, aber ich stelle fest, dass es nicht sehr weit verbreitet ist. Ich denke, ich lese, dass zsh beliebte Features aus den anderen Shells gerne aufnimmt und sie kombiniert (also sind Dinge, die spezifisch für bash sind und Dinge, die für csh spezifisch sind, beide in zsh verfügbar).

Jemand sagte auch, dass ich meinen Geek-Faktor durch Verwendung von zsh biege, aber ich kann dieses Gerücht nicht bestätigen oder leugnen.


0
2018-05-05 20:59



und ja, bash hat auch vi-mode-unterstützung. - pjz
@Milner: Kannst du erklären, welche Art von Unterstützung für den vi-Modus in zsh ist, die nicht in bash ist? Wenn Sie einfach die Möglichkeit meinen, set -o vi auf der Kommandozeile zu setzen, dann ist das eindeutig in beiden. Wenn es eine erweiterte Unterstützung in zsh gibt, könnten Sie dann klar beschreiben, was es ist und was es hinzufügt? - iconoclast