Vraag Unieke kenmerken van bash in vergelijking met zsh


Ik ben al geruime tijd een zsh-gebruiker (voor die tcsh en daarvoor csh). Ik ben er heel blij mee, maar vroeg me af of er aantrekkelijke kenmerken van bash zijn die niet in zsh bestaan. En omgekeerd, zijn er zsh-functies die niet bestaan ​​in bash. Mijn huidige gevoel is dat bash beter is:

  • Als u er al bekend mee bent en geen nieuwe syntaxis wilt leren.
  • Het zal standaard op de meeste alle * nix-machines bestaan, terwijl zsh een extra installatie kan zijn.

Ik probeer hier niet een religieuze strijd te beginnen, daarom ben ik alleen op zoek naar functies die in slechts één van de shells bestaan.


63
2018-05-05 20:38


oorsprong


Hoe zijn functies die uniek zijn voor de een of de ander subjectief? Ik ben eerlijk gezegd niet op zoek naar een vlam en bedacht dat vertrouwdheid van de een of de ander waarschijnlijk een goede reden is om die schaal te verkiezen. - Tim


antwoorden:


zsh is voor vulcans. ;-)

Ernstig: bash 4.0 heeft enkele functies die eerder alleen in zsh werden gevonden, zoals ** globbing:

% ls /usr/src/**/Makefile

is gelijk aan:

% find /usr/src -name "Makefile"

maar duidelijk krachtiger.

In mijn ervaring presteert de programmeerbare afronding van bash iets beter dan die van zsh, althans voor sommige gevallen (bijvoorbeeld het voltooien van debian-pakketten voor aptitude).

bash heeft Alt + . invoegen !$

zsh heeft uitbreiding van alle variabelen, dus u kunt b.v.

% rm !$<Tab>

voor deze. zsh kan ook een opdracht in de backtics uitbreiden, dus

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

opbrengsten

% cat blabb

Ik vind het erg handig om uit te breiden rm *, zoals je kunt zien wat er zou worden verwijderd en misschien een of twee bestanden van de opdracht verwijderen om te voorkomen dat ze worden verwijderd.

Ook leuk: de uitvoer van opdrachten gebruiken voor andere opdrachten die niet van stdin lezen, maar een bestandsnaam verwachten:

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

Van wat ik lees bash-completion ondersteunt ook het invullen van bestandsnamen op afstand via ssh als je ssh-agent gebruikt, wat een goede reden was om over te schakelen naar zsh.

Aliassen in zsh kunnen worden gedefinieerd om op de hele regel te werken in plaats van alleen aan het begin:

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


40
2017-08-09 20:13



In bash, C-M-e naar "shell-expand-line", die zou uitbreiden cat `echo blubb | sed 's/u/a/'`  naar cat blabb en echo $SHELL naar echo /bin/bash in mijn geval. Ook, C-x * naar "glob-expand-word", dat zou uitbreiden rm *. - Victor


Ik wil erop wijzen dat bash niet standaard is geïnstalleerd op FreeBSD, OpenBSD of NetBSD, en het is ook niet standaard geïnstalleerd op Solaris 10 (OpenSolaris heeft het standaard), de laatste keer dat ik een AIX gebruikte en of HP-UX-servers zijn ook niet standaard geïnstalleerd.

Ook is OpenSolaris / bin / sh GEEN bash. Het is ksh. De grootste problemen die ik heb als softwareporter zijn mensen die aannemen dat bin / sh bash is en dat het bash-uitgebreide syntaxis accepteert. Hoewel dit bij de meeste Linux-distributies het geval lijkt te zijn, is dit elders niet het geval en is het echt vervelend.


16
2018-05-24 00:40



Ja je hebt gelijk. Helaas maken al deze leveranciers het heel eenvoudig om bash te installeren als een extra pakket. +1 om te wijzen op de noodzaak van / bin / sh purisme in scripts. - kubanczyk
@kubanczyk: als je op machines werkt waar je geen roottoegang voor hebt, dan is het misschien niet zo eenvoudig om te installeren, dus ik denk dat het punt van X-Istence op de voorgrond staat. (Ik werk aan een hoop Solaris-boxes, en de sysadmins zijn allemaal ksh-junkies. De laatste keer dat ik probeerde mijn eigen software te compileren die ik niet zonder kon (in dit geval), waren er tekortkomingen met de geïnstalleerde compiler, dus zelfs die route was voor mij afgesneden.) - iconoclast


Hoewel ik een bash-gebruiker ben, vind ik een van de functies van zsh best wel gaaf: RPS1.

Onthouden:

  • PS1: de links uitgelijnde prompt
  • RPS1: de juiste uitgelijnde prompt

Monster:

Als je zoiets gebruikt

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

U krijgt uw prompt aan de linkerkant en de huidige directory naar rechts geduwd. Het verdwijnt zelfs wanneer de huidige regel te lang wordt! Dat komt omdat zsh slim genoeg is om lage prioriteit te geven aan RPS1.

U kunt een schermafbeelding van dit voorbeeld bekijken op http://imgur.com/OAZhC.


12
2017-11-25 13:31





Zsh heeft spellingcorrectie. Als je een letter (of meer) uit bent, zal het ontdekken wat je bedoelde.

Het heeft ook een robuustere tabvoltooiing, wat ik leuk vind.

Zsh heeft een interactief configuratiehulpprogramma om het in te stellen zoals jij dat wilt.

Sommige snelheidstests zeggen dat ZS sneller is, maar ik heb geen verschil opgemerkt.


9
2018-05-06 20:05



Een uitgeklede versie van het streepje die slechts een subset van de functies ondersteunt en die is ontworpen om te worden gebruikt in scripts die snel moeten worden uitgevoerd (bijvoorbeeld opstartversies) is een streepje. - Chucky
zsh heeft zelfs een instelling om 'één letter uit' mistypes toe te staan ​​voor Dvorak-toetsenbordgebruik. - vgoff


Ik ken geen bash-functies die zsh niet ondersteunt. Het ontwerpdoel van zsh lijkt het ondersteunen van alle functies die bash toevoegt.

Ik gebruik nog steeds bash in plaats van zsh. Ik kom zelden boeiende functies tegen die zsh ondersteunt die bash niet. Incidentele problemen met zsh in de loop der jaren, of het niet bestaat op bepaalde sysetms, hebben het niet de moeite waard gemaakt om de overstap te maken.

Ik kan eindelijk dezelfde shell gebruiken op elk Unix-systeem, het is niet de moeite waard om dit te breken voor functies die ik nooit zal gebruiken.

De functies in zsh die niet aanwezig zijn in bash lijken meestal schattig maar niet degenen die er dagelijks toe doen.


6
2018-05-24 00:14





bash heeft veel functies die alleen in zsh stonden. U kunt nu ook 'smart tab completion' gebruiken met bash, zoals elke recente ubuntu-gebruiker heeft ontdekt.


3
2018-06-11 11:58





Procesvervanging en uitgebreide globbing zijn de twee functies die ik het meest zou missen. De promptinstellingen zijn ook best cool - het niveau van nesten zien wanneer u complexe instructies op de opdrachtregels typt. Autoloading maakt het opnemen van veel functies in elke shell mogelijk.


1
2018-05-16 12:24



Ik neem aan dat je bedoelt dat je die van zsh zou missen, omdat AFAIK alles wat je noemde in zsh is opgenomen? (Maar weet je zeker dat ze allemaal afwezig zijn van bash? Dat zou me verbazen.) In ieder geval zou het toevoegen van dat je antwoord duidelijker maken, omdat er mensen aan beide kanten van het bash / zsh-hek antwoorden. Het zou ook handig zijn als u voorbeelden zou geven van hoe elk van deze functies uw shell-leven gemakkelijker maken. - iconoclast


Ik ben een fan van zsh vanwege de ondersteuning van de vi-modus, maar ik ontdek dat deze niet erg veel wordt gebruikt. Ik denk dat ik heb gelezen dat zsh graag populaire functies van de andere shells neemt en ze combineert (dus dingen die specifiek zijn voor bash en ding specifiek voor csh zijn beide beschikbaar in zsh).

Iemand zei ook dat ik mijn nerdefactor buig met behulp van zsh, maar ik kan dat gerucht niet bevestigen of ontkennen.


0
2018-05-05 20:59



en ja, bash heeft ook ondersteuning voor vi-mode. - pjz
@Milner: kun je uitleggen wat voor ondersteuning van de vi-modus in zsh is die niet in bash zit? Als je simpelweg het vermogen bedoelt om -o vi op de opdrachtregel te plaatsen, dan is dat duidelijk in beide. Als er wat uitgebreide ondersteuning in zsh is, zou je dan duidelijk kunnen omschrijven wat het is en wat het toevoegt? - iconoclast


Populariteit, #bash 430 gebruikers. #zsh 123 gebruikers. Ik geloof dat de zsh-website een goede vergelijking van zsh met andere shells heeft. zsh heeft betere ondersteuning voor vi-modus.


-1
2018-05-05 20:46



Hoe is de vi-mode in zsh beter? Ik ben een bash-gebruiker en ik heb de vi-modus ingeschakeld, dus ik zou graag willen weten of er een voordeel is bij overstappen. - ptman
@ptman: de prompt van zsh kan worden gemaakt om de modus te vertellen (invoegen / normaal). Readline kan dat niet doen. De promter is ook flexibeler: je kunt syntaxmarkering gebruiken enz. - progo
@progo: ahh! heel aardig. Nu ben ik gewoon macht begin met het gebruiken van de vi-modus in zsh. Dat is een van mijn redenen om tot nu toe met emacs-modus te blijven werken. - iconoclast
@Brandon die kleine verbetering was voor mij de reden om van schelp te wisselen. - progo


Bash gebruikt dezelfde syntaxis voor als en terwijl die kan worden gebruikt in / bin / sh-scripts op de opdrachtregel.
Binnen zsh is de syntaxis anders. Als je effectief zsh gebruikt, moet je beide onthouden als je een if- of while-statement op je opdrachtregel gebruikt


-1
2018-06-12 22:16



Ik probeerde dit, met behulp van if [[ $test = "test" ]]; then echo "success"; else echo "failure"; fi op zowel de opdrachtregel als een script en het werkte in beide gevallen zoals verwacht. Het lijkt er dus op dat u uw feiten niet recht hebt. - iconoclast