Подстановка переменных

Zsh имеет множество расширений в области различных подстановок. По назначению подстановки можно разделить на две группы: Подстановки в строке приглашения и прочие подстановки. Подстановки в строке приглашения могут использовать функции из группы «прочие подстановки».

Подстановки в строке приглашения

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

Для приглашения командной строки существует разделение на левую и правую часть приглашения. Кроме привычных переменных, таких как PS1 и PS2, также существуют их аналоги, имена которых начинаются с буквы R и которые определяют приглашения, выводимые в правой части экрана. Например, это позволяет вынести в правую часть часы, которые показывают время выведения приглашения.

Полное описание всех возможных подстановок для строки приглашения можно найти в справке по Zsh.

Темы для строки приглашения

Благодаря возможностям Zsh пользователи пишут различные модули расширений. Одним из таких модулей является модуль для установки тем для строк приглашения. Этот модуль загружается с помощью команд:

          autoload -U promptinit
          promptinit

и позволяет пользователям использовать заранее подготовленные темы приглашений. Команда prompt -p выдает примеры всех установленных тем строки приглашения.

Прочие подстановки

Все остальные подстановки выполняются в пять шагов, в перечисленном ниже порядке:

  1. Сначала выполняются подстановки в истории. На этом этапе подставляются строки из истории, которые соответствуют заданным командам. См. раздел «Подстановки истории»П

  2. Затем выполняется раскрытие псевдонимов (алиасов). Раскрытие алиасов выполняется немедленно, до того, как командная строка будет разобрана.

  3. Затем выполняется подстановка процессов, параметров, команд, раскрытие арифметических выражений, и затем уже раскрытие выражений в скобках. Каждый из этих этапов подробно описан в справке по Zsh.

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

  5. И на последнем шаге происходит генерация имен файлов (globbing). См. раздел «Генерация имен файлов»

Полный перечень всех шаблонов и настроек вы сможете найти в справке по Zsh.

Подстановки истории

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

Подстановки истории Zsh позволяют указать какое слово из команды нужно задействовать. Для этого используются следующие указатели слов:

:0

первое слово в командной строке;

:n

n-й аргумент;

:^

1-й аргумент (аналогично :1);

:$

последний аргумент строки;

:X-Y

аргументы с X по Y;

:X-

все аргументы начиная с X кроме последнего;

:*

все аргументы;

:X*

все аргументы начиная с X (аналогично :X-$).

Кроме этого, в подстановках истории после указателей слов можно использовать модификаторы, которые позволяют выполнять различные подстановки в истории. Так, например, модификатор :h работает подобно использованию команды dirname, а модификатор :t работает подобно команде basename. Полный список модификаторов можно получить в руководстве по Zsh.

Генерация имен файлов

Zsh предоставляет множество дополнений и настроек по генерации имен файлов.

Операторы глоббинга

Кроме стандартных символов (таких как *, ?, [...]), используемых для генерации имен файлов в других командных процессорах, в Zsh определены дополнительные операторы глоббинга, такие как:

^X

совпадает с любым кроме X. Например, ^*.elc будет соответствовать всем файлам, кроме тех которые указаны в маске (в нашем случае это файлы с расширением .elc);

X~Y

совпадает со всем, что соответствует шаблону X, и не соответствует шаблону Y. Например, *.el*~*.elc соответствует всем файлам, чье расширение начинается с .el, но при этом не будут учитываться файлы с расширением *.elc;

X#

соответствует нулю или нескольким вхождениям шаблона X;

X##

соответствует одному или нескольким вхождениям шаблона X.

Флаги глоббинга

Флаги глоббинга используются для воздействия на шаблон, который стоит правее указанного флага. Все флаги имеют форму (#X), где X определяет нужный модификатор. Ниже приведено описание нескольких флагов, которые могут наиболее часто использоваться в работе:

i

делает шаблон независимым от регистра символов, которые в нем применяются;

l

заставляет символы в нижнем регистре, которые используются в шаблоне, соответствовать символам и в вернем и нижнем регистре. Символы в верхнем регистре, будут соответствовать точно тем же символам;

I

локально отменяет воздействие флагов l и i;

другие флаги, описаны в руководстве по Zsh.

Квалификаторы глоббинга

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

.

для указания обычных файлов,

/

для указания каталогов,

=

для указания сокетов,

и многие другие (можно указывать права доступа, времена модификации файлов и т.п.). Их полное описание можно найти в руководстве по Zsh.

Рекурсивный глоббинг

Zsh позволяет производить рекурсивное раскрытие имен файлов. Для этого используются формы **/ и ***/ Первая форма отличается от второй лишь тем, что не следует по символьным ссылкам. Так, например

            ls **/foo  

произведет поиск файлов с именем foo во всех подкаталогах.

Эти формы не могут комбинироваться с другими формами в одном шаблоне. При одновременном использовании данных форм с другими, оператор * приобретает свое обычное значение.

Кроме вышеперечисленных настроек. Zsh также позволяет использовать приблизительное соответствие, пытаясь найти файлы, в именах которых (по его мнению :-) могли бы быть сделаны ошибки.