Я довольно давно пользуюсь zsh (до этого tcsh и до этого csh). Я вполне доволен этим, но мне было интересно, есть ли какие-либо убедительные особенности bash, которых нет в zsh. И наоборот, существуют ли функции zsh, которых нет в bash. Сейчас я считаю, что bash лучше:
Я не пытаюсь начать здесь религиозную битву, поэтому я просто ищу возможности, которые существуют только в одной из оболочек.
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-Completion также поддерживает завершение удаленных имен файлов по 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=’%B(%h) %m%#%b ‘
RPS1=’(%20<…<%~)'
Вы получаете приглашение слева, а текущий каталог перемещается справа. Он даже исчезает, когда текущая строка становится слишком длинной! Это потому, что zsh достаточно умен, чтобы дать RPS1 низкий приоритет.
Вы можете увидеть снимок экрана этого примера по адресу http://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 любит брать популярные функции из других оболочек и комбинировать их (так что вещи, специфичные для bash, и вещи, специфичные для csh, доступны в zsh).
Кто-то также сказал, что я использую zsh для увеличения своего компьютерного фанатика, но я не могу подтвердить или опровергнуть этот слух.
Популярность, #bash 430 пользователей. #zsh 123 пользователя. Я считаю, что на сайте zsh есть хорошее сравнение zsh с другими оболочками. zsh имеет лучшую поддержку режима vi.
Bash использует тот же синтаксис для if и while, который можно использовать в сценариях / bin / sh в командной строке.
Внутри zsh синтаксис другой. Эффективно используя zsh, вы должны помнить и то, и другое, если вы используете оператор if или while в командной строке.