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

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

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

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

10 ответов

Решение

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

Серьезно: bash 4.0 имеет некоторые функции, ранее встречавшиеся только в zsh, например ** globbing:

% ls /usr/src/**/Makefile

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

% find /usr/src -name "Makefile"

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

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

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

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

% rm !$<Tab>

за это. Zsh также может развернуть команду в backtics, поэтому

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

доходность

% cat blabb

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

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

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

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

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

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

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

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

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

Помните:

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

Образец:

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

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

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

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

У Zsh исправлена ​​орфография. Если вы откажетесь от письма (или больше), он поймет, что вы имели в виду.

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

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

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

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

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

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

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

Bash имеет много функций, которые раньше были только в Zsh. Теперь у вас есть возможность "завершить умную вкладку" с bash, как обнаружил любой недавний пользователь Ubuntu.

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

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

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

Популярность, #bash 430 пользователей. #zsh 123 пользователя. Я считаю, что на веб-сайте zsh есть хорошее сравнение zsh с другими оболочками. Zsh имеет лучшую поддержку режима vi.

Bash использует тот же синтаксис для if и while, который можно использовать в скриптах / bin / sh в командной строке.
Внутри zsh синтаксис другой. Эффективно используя zsh, вы должны запомнить оба, если вы используете оператор if- или while в командной строке

Другие вопросы по тегам