Spec-Zone.ru › Bash

Сопоставление с образцом

​ ​

Любой символ, присутствующий в образце, кроме описанных ниже специальных символов образца, соответствует самому себе. Символ NUL не может встречаться в образце. Обратная косая черта экранирует следующий символ; при сопоставлении экранирующая обратная косая черта отбрасывается. Специальные символы образца необходимо заключать в кавычки, если требуется сопоставить их буквально.

Специальные символы образца имеют следующие значения:

*

Соответствует любой строке, включая пустую строку. Если включён параметр оболочки globstar и ‘*’ используется в контексте раскрытия имён файлов, две расположенные рядом звёздочки ‘*’ в качестве единого образца соответствуют всем файлам и нулю или более каталогам и подкаталогам. Если за ними следует ‘/’, две расположенные рядом звёздочки ‘*’ соответствуют только каталогам и подкаталогам.

?

Соответствует любому одному символу.

[…]

Соответствует любому из символов, заключённых в квадратные скобки. Это называется выражением в квадратных скобках и соответствует одному символу. Пара символов, разделённых дефисом, обозначает выражение диапазона; ему соответствует любой символ, находящийся между этими двумя символами включительно, согласно последовательности сортировки и набору символов текущей локали. Если первым символом после ‘[’ является ‘!’ или ‘^’, соответствуют любые символы, не входящие в диапазон. Чтобы сопоставить ‘−’, поместите его первым или последним символом в наборе. Чтобы сопоставить ‘]’, поместите его первым символом в наборе.

Порядок сортировки символов в выражениях диапазона и символы, входящие в диапазон, определяются текущей локалью и значениями переменных оболочки LC_COLLATE и LC_ALL, если они заданы.

Например, в локали C по умолчанию ‘[a-dx-z]’ эквивалентно ‘[abcdxyz]’. Во многих локалях символы сортируются в словарном порядке, и в этих локалях ‘[a-dx-z]’ обычно не эквивалентно ‘[abcdxyz]’; например, оно может быть эквивалентно ‘[aBbCcDdxYyZz]’. Чтобы получить традиционную интерпретацию диапазонов в выражениях в квадратных скобках, можно принудительно использовать локаль C, задав для переменной окружения LC_COLLATE или LC_ALL значение ‘C’ либо включив параметр оболочки globasciiranges.

В выражении в квадратных скобках классы символов можно задавать с помощью синтаксиса [:class:], где class — один из следующих классов, определённых стандартом POSIX:

alnum   alpha   ascii   blank   cntrl   digit   graph   lower
print   punct   space   upper   word    xdigit

Класс символов соответствует любому символу, принадлежащему этому классу. Класс символов word соответствует буквам, цифрам и символу ‘_’.

Например, следующий образец соответствует любому символу, принадлежащему классу символов space в текущей локали, затем любой заглавной букве или символу ‘!’, точке и, наконец, любой строчной букве или дефису.

[[:space:]][[:upper:]!].[-[:lower:]]

В выражении в квадратных скобках класс эквивалентности можно задать с помощью синтаксиса [=c=]; он соответствует всем символам с тем же весом сортировки (определяемым текущей локалью), что и символ c.

В выражении в квадратных скобках синтаксис [.symbol.] соответствует символу сортировки symbol.

Если параметр оболочки extglob включён с помощью встроенной команды shopt, оболочка распознаёт несколько операторов расширенного сопоставления с образцом. В следующем описании список-образцов — это список из одного или нескольких образцов, разделённых символом ‘|’. При сопоставлении имён файлов параметр оболочки dotglob определяет набор проверяемых имён файлов, как описано выше. Составные образцы можно создавать с помощью одного или нескольких следующих подобразцов:

?(pattern-list)

Соответствует нулю или одному вхождению заданных образцов.

*(pattern-list)

Соответствует нулю или нескольким вхождениям заданных образцов.

+(pattern-list)

Соответствует одному или нескольким вхождениям заданных образцов.

@(pattern-list)

Соответствует одному из заданных образцов.

!(pattern-list)

Соответствует всему, кроме заданных образцов.

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

При сопоставлении имён файлов параметр оболочки dotglob определяет набор проверяемых имён файлов: когда dotglob включён, набор имён файлов включает все файлы, начинающиеся с ‘.’, но имена файлов . и .. должны соответствовать образцу или подобразцу, начинающемуся с точки; когда параметр отключён, набор не включает имена файлов, начинающиеся с ‘.’, если только образец или подобразец не начинается с ‘.’. Если включён параметр оболочки globskipdots, имена файлов . и .. никогда не входят в набор. Как и выше, ‘.’ имеет специальное значение только при сопоставлении имён файлов.

Сложное расширенное сопоставление образцов с длинными строками выполняется медленно, особенно если образцы содержат альтернативы, а строки — несколько совпадений. Использование отдельных сопоставлений с более короткими строками или массивов строк вместо одной длинной строки может быть быстрее.

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/Pattern-Matching.html

Spec-Zone.ru

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