Расширения фигурных скобок и расширения тильды

Расширения фигурных скобок

Фигурные скобки являются механизмом с помощью которого могут быть сгенерированы произвольные строки. Этот механизм похож на подстановку имен файлов, кроме отсутствия необходимости названий файлов. Шаблоны расширенные фигурными скобками принимают форму дополнительной преамбулы, а затем либо серию строк разделенную запятыми, или выражение последовательность между парой фигурных скобок, за которыми следует дополнительный postscript. Преамбула префикса каждой строки, заключается в фигурные скобки и postscript затем добавляется в каждую результирующую строку, расширение происходит слева на право.

Фигурные скобки расширения могут вкладываться. Результаты каждой расширенной строки не сортируются; порядок сохраняется слева на право. Для примера, a{b,c,d}e расширяется в ‘abe ace ade’.

Выражение последовательности принимает вид {x..y[..incr]}, где x и y являются любо целые или отдельные символы, и incr, дополнительное прирашение является целым числом. Когда подставляются целые числа, выражение расширяется с каждым номером между x и y, включительно. Подставление целых чисел может иметь префикс 0, чтобы заставить каждую часть иметь одинаковую ширину. Когда x или y начинается с нуля, оболочка пытается заставить все генерируемые термины содержать одинаковое количество цифр, при необходимости происходит заполнение нулями. Когда подставляются знаки, в выражении расширяется каждый символ лексикографически между x и y, включительно. Следует отметить, что х и у должны быть одного типа. Когда подставляется приращение, оно используется как разность между каждым термином. По умолчанию приращение равно 1 или -1, по мере необходимости.

Фигурные скобки выполняются перед любыми иными расширениями, все специальные символы иных расширений сохраняются в результате. Это строго текстуально. Bash не применяет никакой синтаксической интерпретации контекста расширения или текста, заключенного в фигурные скобки. Правильно сформированные фигурные скобки, должны содержать кавычки, и открывающую, а так же закрывающую фигурные скобки, и по крайней мере одну неназванную запятую или допустимое выражение последовательности. Любые некорректные скобки, остаются неизменными. «{» или «,», может быть отменено обратной косой чертой, чтобы предотвратить его считаться частью из скобки выражения. Чтобы избежать конфликтов с параметром расширения, строка «${» не считается частью расширения фигурных скобок. Эта конструкция используется для краткости, когда общий префикс строк, которые будут созданы больше, чем в предыдущем примере:

mkdir /usr/local/src/bash/{old,new,dist,bugs}

или

chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}

Фигурные скобки вносят некоторую несовместимость с устаревшими версиями sh. sh не относится к открытию или закрытию фигурных скобок, особенно когда они появляются как часть слова и сохраняет их в выводе. Bash удаляет скобки из слов как следствие подстановка фигурных скобок. Например слово введеное в sh как file{1,2} отображается одинаково в выводе. Тоже слово выводится как file1 file2 после расширения в Bash. Если необходима полная совместимость с sh, bash желательно запускать с опцией +B или отключить фигурное расширение скобок с опцией +B команды set.

Расширения тильды

Если слово начинается с символа тильды заключенного в одиночные кавычки (‘~’), все символы символы предшествующие первой черте кавычки, или все символы если нет косой черты перед кавычкой, считается тильдой префикса. Если ни один из символов в Тильда-префикс не указаны, символы в тильда-префикс после тильды рассматриваются как возможное логин имя. Если регистрационное имя является пустой строкой, тильда заменяется на значение shell параметров HOME. Если HOME не задана, в домашнем каталоге пользователя, shell замещается на каталог пользователя который выполняет процесс командного интерпретатора. В противном случае, тильда-префикс заменяется на домашний каталог, связанный с указанным логином входа.

Если тильда-префикса ‘~ +‘, значение переменной shell PWD заменяет тильда-префикса. Если тильда-префикс ‘~ —‘, значение переменной shell OLDPWD если она установлена заменяется. Если символы после тильды в тильда-префиксе состоит из числа N, необязательного префикса ‘+‘ или ‘‘, тильда-префикс заменяется на соответствующий элемент из стека каталогов, которые можно вывести на экран вызывая встроенные каталоги с тильда-префиксом в качестве аргумента. Если символы после тильды в тильда-префикс состоит из ряда без ведущего ‘+ ‘ или ‘‘, предполагается ‘+‘.

Если логин пользователя недействителен, или расширение тильды не получается, слово остается неизменным.

Каждая назначенная переменная проверяется на наличие незамаскированных тильда-префиксов сразу после «:» или «=». В этих случаях расширение тильды, так же выполняется. Следовательно, можно использовать имена файлов с тильдами, в присваиваниях переменных PATH, MAILPATH и CDPATH, и shell выполнит необходимое расширение.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *