web-dev-qa-db-fra.com

Caractéristiques uniques de bash par rapport à zsh

J'ai été un utilisateur ZSH pendant un certain temps (avant que ce TCSH et avant cette CSH). Je suis assez content, mais je me demandais s'il y a des caractéristiques convaincantes de bash qui n'existent pas dans ZSH. Et inversement, y a-t-il des fonctionnalités ZSH qui n'existent pas dans Bash. Mon sentiment actuel est que Bash est meilleur:

  • Si vous connaissez déjà cela et que vous ne voulez pas apprendre une nouvelle syntaxe.
  • Il va exister sur la plupart des machines * NIX par défaut, tandis que ZSH peut être une installation supplémentaire.

Ne pas essayer de commencer une bataille religieuse ici, c'est pourquoi je cherche juste des caractéristiques qui n'existent que dans une seule des obus.

67
Tim

zSH est pour les Vulcains. ;-)

Sérieusement: Bash 4.0 a des fonctionnalités précédemment trouvées dans ZSH, comme ** Globbing:

% ls /usr/src/**/Makefile

est équivalent à:

% find /usr/src -name "Makefile"

mais évidemment plus puissant.

Dans mon expérience, l'achèvement programmable de Bash fonctionne un peu mieux que celui de ZSH, au moins dans certains cas (remplir les packages debian pour aptitude par exemple).

bash a Alt + . insérer !$

zsh has expansion of all variables, so you can use e.g.

% rm !$<Tab>
</ code>

pour ça. zsh peut également développer une commande en backtisme, donc

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

rendements

% cat blabb

Je trouve cela très utile d'étendre rm *, comme vous pouvez le constater, ce qui serait supprimé et peut peut-être supprimer un ou deux fichiers du Commmand pour les empêcher d'être supprimé.

Aussi bien: utiliser la sortie des commandes des autres commandes qui ne lisent pas de stdin, mais attendez-vous à un nom de fichier:

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

D'après ce que j'ai lu Bash-achèvement prend également en charge la réalisation des noms de fichiers distants sur SSH si vous utilisez SSH-Agent, qui était une bonne raison de passer à ZSH.

Les alias dans ZSH peuvent être définis pour travailler sur toute la ligne au lieu de tout simplement au début:

% alias -g ... = "../ .." 
% CD ... 
40
0x89

Je tiens à souligner que Bash n'est pas installé par défaut sur FreeBSD, OpenBSD ou NetBSD, et il n'est pas non plus installé par défaut sur Solaris 10 (Opensolaris l'a comme défaut), la dernière fois que j'ai utilisé un AIX, et ou Serveurs HP-UX Il n'a pas été installé par défaut non plus.

De plus, sur OpenSolaris/Bin/SH n'est pas bash. C'est ksh. Les principaux problèmes que j'ai en tant que porteur de logiciels sont des personnes qui supposent/bin/sh sont bash et qu'elle acceptera Bash Syntaxe étendue. Bien que cela semble être le cas sur la plupart des distributions Linux, ce n'est pas le cas ailleurs et c'est vraiment ennuyeux.

16
X-Istence

Bien que je sois un utilisateur bash, je trouve l'une des fonctionnalités de ZSH assez cool: RPS1.

Rappelles toi:

  • PS1: l'invite alignée gauche
  • RPS1: la bonne invite alignée

Échantillon:

Lorsque vous utilisez quelque chose comme

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

Vous obtenez votre invite à gauche et le répertoire actuel poussé à droite. Il disparaît même lorsque la ligne actuelle devient trop longue! C'est parce que ZSH est assez intelligent pour donner une priorité faible à RPS1.

Vous pouvez voir une capture d'écran de cet exemple à http://imgur.com/oazhc .

12
Chucky

ZSH a une correction d'orthographe. Si vous êtes une lettre (ou plus) éteinte, cela déterminera ce que vous vouliez dire.

Il a également une achèvement de tabulation plus robuste que j'aime.

ZSH a un utilitaire de configuration interactif pour l'obtenir défini comme vous le souhaitez.

Certains tests de vitesse disent que ZSH est plus rapide, mais je n'ai pas remarqué aucune différence.

9
Magus

Je ne connais aucune caractéristique de Bash que ZSH ne supporte pas. L'objectif de conception de ZSH semble inclure la prise en charge de toutes les fonctionnalités que Bash ajoute.

J'utilise toujours Bash au lieu de ZSH. Je rencontre rarement des caractéristiques convaincantes que ZSH soutient que Bash ne le fait pas. Des problèmes occasionnels avec ZSH au fil des ans ou n'existant pas sur certains SYSTMS, n'ont pas valu la peine de faire la transition.

Je peux enfin utiliser la même coquille sur chaque système UNIX, il ne vaut pas la peine de céder cela pour des fonctionnalités que je n'utiliserai jamais.

Les caractéristiques présentes dans ZSH qui ne sont pas présentes dans Bash semblent principalement être mignonnes, mais pas celles qui compteraient au quotidien.

6
carlito

bash a de nombreuses fonctionnalités qui ne sont utilisées que dans ZSH. Vous pouvez avoir une "achèvement de tabulation intelligente" avec Bash Aswell maintenant, car tout utilisateur récent de Ubuntu a découvert.

3
Rory

La substitution de processus et le globbing étendu sont les deux caractéristiques que je manquiez le plus. Les paramètres d'invite sont assez cools aussi - voir le niveau de nidification lorsque vous tapez des énoncés complexes sur les lignes de commande. AutoLoading fabrique des nombreuses fonctions dans chaque coque faisable.

1
tdavies

Je suis fan de ZSH à cause du support en mode VI, mais je découvre que ce n'est pas très largement utilisé. Je pense que j'ai lu que ZSH aime prendre des caractéristiques populaires des autres coquilles et les combiner (donc les choses spécifiques à Bash et à une chose spécifique à CSH sont toutes deux disponibles dans ZSH).

Quelqu'un a également dit que je fléchis mon facteur geek en utilisant ZSH, mais je ne peux pas confirmer ou nier cette rumeur.

0
Milner