Уникальные особенности 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).
Баш имеет zsh has expansion of all variables, so you can use e.g.Alt + .
вставить !$
% 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 в командной строке