Spec-Zone.ru › Bash

Раскрытие скобок

​ ​

Раскрытие скобок — это механизм для генерации произвольных строк с общим префиксом и суффиксом, любой из которых может быть пустым. Этот механизм похож на раскрытие имен файлов (см. Раскрытие имен файлов), но сгенерированные имена файлов не обязательно должны существовать. Шаблоны для раскрытия скобок формируются из необязательной вводной части, за которой следует либо последовательность строк, разделённых запятыми, либо выражение последовательности в паре фигурных скобок, а затем необязательная заключительная часть. Вводная часть добавляется перед каждой строкой, содержащейся в скобках, а заключительная часть добавляется к каждой полученной строке; раскрытие выполняется слева направо.

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

bash$ echo a{d,c,b}e
ade ace abe

Выражение последовательности имеет вид x..y[..incr], где x и y — целые числа или буквы, а incr — необязательный шаг, представляющий собой целое число. Если заданы целые числа, выражение раскрывается во все числа от x до y включительно. Если x или y начинается с нуля, каждый полученный элемент будет содержать одинаковое количество цифр; при необходимости перед числом добавляются нули. Если заданы буквы, выражение раскрывается во все символы, лексикографически расположенные между x и y включительно, с использованием локали C. Обратите внимание, что и 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}’, отображается в выводе без изменений. После раскрытия скобок Bash выводит это слово как ‘file1 file2’. Запустите Bash с параметром +B или отключите раскрытие скобок параметром +B команды set (см. Встроенные команды оболочки), чтобы обеспечить строгую совместимость с sh.

Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
Licensed under the GNU Free Documentation License.
https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API