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 оболочки.

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

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

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

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

Внутри ‘[’ и ‘]’ синтаксис [.символ.] сопоставляет символ сортировки символ.

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

?(pattern-list)

Сопоставляет ноль или одну позицию заданных шаблонов.

*(pattern-list)

Сопоставляет ноль или более позиций заданных шаблонов.

+(pattern-list)

Сопоставляет одну или более позиций заданных шаблонов.

@(pattern-list)

Сопоставляет один из заданных шаблонов.

!(pattern-list)

Сопоставляет всё, кроме одного из заданных шаблонов.

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

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

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

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