Главная » 2017 » Ноябрь » 17 » man 7 glob
00:05
man 7 glob

SEO sprint - Всё для максимальной раскрутки!





ИМЯ


glob - шаблоны полных имён файлов



ОПИСАНИЕ


Давным-давно, во времена UNIX V6, существовала программа /etc/glob, которая могла
раскрывать шаблоны подстановки. Очень скоро она стала встроенной функцией
командной оболочки.

В наши дни существует библиотечная функция glob(3), которая выполняет эту задачу
для пользовательских программ.

Следующие правила приведены в соответствии со стандартом POSIX.2, 3.13.

Тип шаблона
Строка считается шаблоном подстановки, если содержит в себе один из символов '?',
'*' или '['. Globbing — это операция, которая раскрывает шаблон подстановки в
список имён путей, соответствующих данному шаблону. Соответствие определяется
следующими правилами:

'?' (без учета кавычек) соответствует любому одному символу.

'*' (без учета кавычек) соответствует любой строке, включая пустую строку.

Классы символов

Выражение «[...]», где первый символ после открывающей '[' - не равен '!',
соответствует одному символу, который может быть любым символом из набора,
находящегося внутри скобок. Строка внутри скобок не может быть пустой, таким
образом, ']' также может находиться внутри скобок и выступать в качестве первого
символа (то есть «[][!]» будет соответствовать трем символам '[', ']' и '!').

Диапазоны

Два символа, разделённые '-', образуют особое выражение — диапазон (то есть
«[A-Fa-f0-9]» будет эквивалентен записи «[ABCDEFabcdef0123456789]»). Сюда также
может входить и сам '-' в качестве начального или конечного символа (то есть
«[]-]» будет соответствовать только двум символам - ']' и '-', а «[--0]» — трем
символам: '-', '.', '0', так как '/' не может быть использован).

Разность множеств

Выражение «[!...]» соответствует одному любому символу, который не входит в
множество, получаемое путем удаления первого '!' (то есть «[!]a-]» будет
соответствовать любому одному символу за исключением ']', 'a' и '-').

Специальное значение '?', '*' и '[' может быть аннулировано путём экранирования их
обратной косой чертой или, в случае, когда они являются частью оболочки командной
строки, путём заключения их в кавычки. Внутри квадратных скобок эти символы не
имеют специального значения. Таким образом, «[[?*\]» совпадает с четырьмя
символами '[', '?', '*' и '\'.

Полные составные пути
Раскрытие (globbing) применяется к каждой части полного составного имени файла
отдельно. Символ '/' в полном имени файла не может совпадать с шаблоном '?' или
'*', а только с диапазоном подобным «[.-0]». Диапазон не может включать в себя
символ '/', поскольку это будет считаться синтаксической ошибкой (в POSIX
требуется, чтобы синтаксически некорректные шаблоны не изменялись).
соответствующего пустому списку, например:

xv -wait 0 *.gif *.jpg

где, возможно, файлы *.gif на самом деле отсутствуют (и это не ошибка). Несмотря
на это, в POSIX требуется, чтобы шаблон, синтаксически неправильный или
раскрывающийся в пустой список путей к файлам, оставался без изменений. В bash
можно принудительно включить классическое поведение с помощью команды:

shopt -s nullglob

Подобная проблема может проявиться вновь. Например, там, где в старых сценариях
использовалось

rm `find . -name "*~"`

в новых сценариях используется

rm -f nosuchfile `find . -name "*~"`

для избежания сообщений об ошибках rm, вызванного с пустым списком аргументов.



ЗАМЕЧАНИЯ


Регулярные выражения
Заметим, что шаблоны не являются регулярными выражениями, хотя и похожи.
Во-первых, они используются для выявления совпадений в именах файлов, а не в
тексте. Во-вторых, используются разные соглашения: например, регулярное выражение
'*' означает ноль или более копий предшествующему символу.

Теперь, когда в квадратных скобках у регулярных выражений для отрицания
используется '^', в POSIX оговаривается, что эффект шаблона «[^...]» не определён.

Классы символов и интернационализация
Изначально диапазоны были определены для символов ASCII, так что «[ -%]»
соответствует «[ !"#$%]», а «[a-z]» соответствует «любому символу нижнего
регистра». В некоторых реализациях UNIX это обобщено так, что диапазон X-Y
соответствует всем символам, коды которых находятся между X и Y. Однако, это
требует знания способа кодирования символов в локальной системе и, более того, не
удобно, если последовательность сортировки для локального алфавита отличается от
последовательности кодов символов. Поэтому в POSIX значительно расширено
обозначение квадратных скобок как для шаблонов файлов, так и для регулярных
выражений. Выше встретилось три типа выражений в скобках: отрицание (i), указанный
явно символ (ii) и диапазон (iii). В POSIX диапазоны определены в более удобном с
точки зрения интернационализации виде, а также добавлены три новых типа:

(iii) Диапазоны X-Y включают в себя все символы, находящиеся между X и Y
(включительно) в соответствии с текущей последовательностью сортировки,
определённой в категории LC_COLLATE текущей локали.

(iv) Именованные классы символов, такие, как:

[:alnum:] [:alpha:] [:blank:] [:cntrl:]
[:digit:] [:graph:] [:lower:] [:print:]
[:punct:] [:space:] [:upper:] [:xdigit:]

Благодаря им можно указать значение «[[:lower:]]» вместо «[a-z]», и это будет
работать для Дании, где в алфавите есть три буквы, стоящие после «z». Эти классы
«[aáàäâ]», то есть «[a[.a-acute.][.a-grave.][.a-umlaut.][.a-circumflex.]]».



СМОТРИТЕ ТАКЖЕ


sh(1), fnmatch(3), glob(3), locale(7), regex(7)



Категория: (7) Различные описания, соглашения и прочее | Просмотров: 566 | Добавил: Администратор | Рейтинг: 0.0/0
Всего комментариев: 0
avatar