Вопрос: Уникальные особенности bash по сравнению с zsh


Я был пользователем zsh довольно долго (до этого tcsh и до этого csh). Я очень доволен этим, но задавался вопросом, есть ли какие-либо убедительные черты bash, которых нет в zsh. И наоборот, существуют ли функции zsh, которых нет в bash. Мое настоящее ощущение, что bash лучше:

  • Если вы уже знакомы с ним и не хотите изучать новый синтаксис.
  • Он будет существовать на большинстве всех машин * nix по умолчанию, тогда как zsh может быть дополнительной установкой.

Не пытайтесь начать религиозную битву здесь, поэтому я просто ищу функции, которые существуют только в одной оболочке.


62
2018-05-05 20:38


Источник


Каковы особенности, которые уникальны для одного или другого субъекта? Я честно не ищу фламвар и продолжаю, что знакомство с тем или другим, вероятно, является веской причиной, чтобы предпочесть эту оболочку. - Tim


Ответы:


zsh для вулканов. ;-)

Шутки в сторону: bash 4.0 имеет некоторые функции, ранее найденные только в zsh, например ** globbing:

% ls /usr/src/**/Makefile

эквивалентно:

% find /usr/src -name "Makefile"

но, очевидно, более мощным.

По моему опыту программируемое завершение bash выполняет бит лучше, чем zsh, по крайней мере для некоторых случаев (например, для создания debian-пакетов для aptitude).

Баш имеет Alt + . вставить !$

zsh имеет расширение всех переменных, поэтому вы можете использовать, например,

% rm !$<Tab>

для этого. zsh также может расширять команду в backtics, поэтому

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

доходность

% cat blabb

Мне очень полезно расширять rm *, так как вы можете видеть, что будет удалено, и, возможно, удалите один или два файла из комманды, чтобы предотвратить их удаление.

Также приятно: используя вывод команд для других команд, которые не читаются из stdin, но ожидают имя файла:

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

Из того, что я прочитал, bash-completion также поддерживает завершение удаленных имен файлов поверх ssh, если вы используете ssh-agent, что было хорошей причиной для перехода на zsh.

Псевдонимы в zsh могут быть определены для работы на всей строке, а не только в начале:

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


39
2017-08-09 20:13



В bash, C-M-e на «shell-expand-line», который будет расширяться cat `echo blubb | sed 's/u/a/'`  в cat blabb а также echo $SHELL в echo /bin/bash в моем случае. Также, C-x * к «glob-expand-word», который будет расширяться rm *, - Victor


Я хотел бы указать, что bash не устанавливается по умолчанию в FreeBSD, OpenBSD или NetBSD, и он также не установлен по умолчанию в Solaris 10 (OpenSolaris использует его как значение по умолчанию), последний раз, когда я использовал AIX и Серверы HP-UX также не были установлены по умолчанию.

Кроме того, OpenSolaris / bin / sh не является bash. Это ksh. Самые большие проблемы, которые я имею в качестве носителей программного обеспечения, - это люди, которые предполагают / bin / sh bash и что он будет принимать расширенный синтаксис bash. Хотя это похоже на большинство дистрибутивов Linux, это не так в другом месте, и это действительно раздражает.


15
2018-05-24 00:40



Да ты прав. Увы, все эти поставщики уверены, что очень легко установить bash в качестве дополнительного пакета. +1 для указания необходимости / bin / sh purism в скриптах. - kubanczyk
@kubanczyk: Если вы работаете на машинах, к которым у вас нет доступа root, тогда это может быть не так просто установить, поэтому я считаю, что точка X-Istence стоит. (Я работаю над связкой ящиков Solaris, а sysadmins - все ksh junkies. В прошлый раз я пытался скомпилировать свое собственное программное обеспечение, в котором я не мог жить без (git в этом случае), были недостатки с установленным компилятором, поэтому даже этот маршрут был отрезан мне.) - iconoclast


Хотя я пользователь bash, я нахожу одну из функций zsh довольно крутой: RPS1.

Запомнить:

  • PS1: приглашение влево
  • RPS1: подсказка с выравниванием по правому краю

Образец:

При использовании чего-то вроде

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

Вы получите подсказку слева, а текущий каталог - вправо. Он даже исчезает, когда текущая линия становится слишком длинной! Это потому, что zsh достаточно умен, чтобы придать RPS1 низкий приоритет.

Вы можете увидеть снимок экрана этого примера в http://imgur.com/OAZhC,


12
2017-11-25 13:31





Zsh имеет корректуру правописания. Если вы - письмо (или больше), то оно выяснит, что вы имели в виду.

Он также имеет более надежное завершение табуляции, которое мне нравится.

Zsh имеет интерактивную конфигурационную утилиту, чтобы настроить ее как угодно.

Некоторые тесты скорости говорят, что zsh быстрее, но я не заметил никакой разницы.


9
2018-05-06 20:05



Урезанная версия тире, которая поддерживает только часть его функций и предназначена для использования в сценариях, которые должны выполняться быстро (например, запуск), является тире. - Chucky
zsh даже имеет настройку, позволяющую использовать «одну букву» для использования клавиатуры Dvorak. - vgoff


Я не знаю никаких функций bash, которые zsh не поддерживает. Цель дизайна zsh, как представляется, включает поддержку любых функций, которые добавляет bash.

Я все еще использую bash вместо zsh. Я редко сталкиваюсь с непревзойденными функциями, которые zsh поддерживает, что bash этого не делает. Случайные проблемы с zsh на протяжении многих лет, или они не существуют на определенных системах, не сделали этого перехода.

Я могу, наконец, использовать одну и ту же оболочку в каждой системе Unix, это не стоит превзойти ее для функций, которые я никогда не буду использовать.

Функции, присутствующие в zsh, которые отсутствуют в bash, по-видимому, в основном бывают симпатичными, но не теми, которые будут иметь значение на повседневной основе.


5
2018-05-24 00:14





У bash есть много функций, которые использовались только в zsh. Теперь у вас может быть «умная закладка» с bash, как и любой новый пользователь ubuntu.


3
2018-06-11 11:58





Замена процессов и расширенное подтягивание - вот две особенности, которые я бы пропустил больше всего. Параметры подсказки также довольно круты - вид уровня вложенности при наборе сложных операторов в командной строке. Автозагрузка делает в том числе множество функций в любой возможной оболочке.


1
2018-05-16 12:24



Я предполагаю, что вы имеете в виду, что пропустите те из zsh, поскольку AFAIK все, что вы упомянули, включено в zsh? (Но вы уверены, что все они отсутствуют в bash? Это меня удивило бы.) Во всяком случае, добавив, что это сделает ваш ответ более ясным, так как есть люди, которые отвечают по обеим сторонам забора bash / zsh. Кроме того, было бы полезно, если бы вы приводили примеры того, как каждая из этих функций облегчает жизнь вашей оболочки. - iconoclast


Я поклонник zsh из-за поддержки режима vi, но я обнаруживаю, что он не очень широко используется. Я думаю, что я читал, что zsh любит брать популярные функции из других оболочек и комбинировать их (так что вещи, специфичные для bash и вещи, специфичные для csh, доступны в zsh).

Кто-то также сказал, что я изгибаю свой фактор geek, используя zsh, но я не могу подтвердить или опровергнуть этот слух.


0
2018-05-05 20:59



и да, bash также поддерживает vi-mode. - pjz
@Milner: можете ли вы объяснить, какая поддержка режима vi находится в zsh, а не в bash? Если вы просто имеете в виду способность делать set -o vi в командной строке, то это очевидно в обоих. Если в zsh есть расширенная поддержка, можете ли вы четко описать, что это такое и что он добавляет? - iconoclast