В компьютерном программировании шаблоны glob определяют наборы имен файлов с подстановочные знаки. Например, команда Unix Bash shell mv *.txt textfiles /
перемещает (mv
) все файлы с именами, заканчивающимися на .txt
из текущего каталога в каталог текстовых файлов
. Здесь *
- это подстановочный знак, обозначающий «любая строка символов», а *.txt
- шаблон глобуса. Другой распространенный подстановочный знак - это вопросительный знак (?
), который обозначает один символ.
Помимо сопоставления имен файлов, глобусы также широко используются для сопоставления произвольных строк (сопоставление с подстановочными знаками ). В этом качестве общим интерфейсом является fnmatch
.
glob
- владелец - dmr
, сокращение от Деннис Ритчи.. Команда glob, сокращение от global, происходит от самых ранних версий Bell Labs Unix. Командные интерпретаторы ранних версий Unix (с 1-го по 6-е выпуски, 1969–1975) полагались на отдельную программу для расширения подстановочных знаков в аргументах без кавычек команды: / etc / glob. Эта программа выполнила расширение и предоставила расширенный список путей к файлам для команды для выполнения.
Glob изначально был написан на языке программирования B. Это была первая часть основного программного обеспечения Unix, разработанная на языке программирования высокого уровня. Позже эта функциональность была предоставлена в виде библиотечной функции C , glob ()
, используемой такими программами, как оболочка. Обычно он определяется на основе функции fnmatch ()
, которая проверяет, соответствует ли строка заданному шаблону. Обе функции являются частью POSIX : функции, определенные в POSIX.1 с 2001 года, и синтаксис, определенный в POSIX.2. Идея определения отдельной функции сопоставления началась с wildmat (сопоставление с подстановочными знаками), простой библиотеки для сопоставления строк с глобусами Bourne Shell.
Традиционно глобусы не соответствуют скрытым файлам в виде файлов точек Unix ; чтобы соответствовать им, шаблон должен явно начинаться с .
. Например, *
соответствует всем видимым файлам, а . *
соответствует всем скрытым файлам.
Наиболее распространенными подстановочными знаками являются *
, ?
и […]
.
Подстановочный знак | Описание | Пример | Соответствует | Не соответствует |
---|---|---|---|---|
* | соответствует любому количеству любых символов, включая отсутствие | Правил * | Правил , Правил или Юрист | GrokLaw , La или aw |
* Law * | Law , GrokLaw или Lawyer . | La или aw | ||
? | соответствует любому одиночному символу | ? at | Cat , cat , Bat или bat | at |
[abc] | соответствует одному символу, указанному в скобках | [CB] в | Cat или Bat | cat или bat |
[az] | соответствует одному символу из (зависящего от языкового стандарта) диапазона, указанного в скобка | Letter [0-9] | Letter0 , Letter1 , Letter2 до Letter9 | Letters , Letter или Letter10 |
Во всех случаях символ разделителя пути (/
в Unix или \
в Windows) никогда не будет совпадать.
В Unix-подобных системах *
, ?
определяется, как указано выше, тогда как […]
имеет два дополнительных значения:
Подстановочный знак | Описание | Пример | Соответствует | Не соответствует |
---|---|---|---|---|
[! Abc] | соответствует одному символу, который не указан в квадратная скобка | [! C] в | Bat , bat или cat | Cat |
[! az] | соответствует одному символу, который является не из диапазона, указанного в скобках | Letter [! 3-5] | Letter1 , Letter2 , Letter6 до Letter9 и Letterx и т. д. | Letter3 , Letter4 , Letter5 или Letterxx |
В диапазоны также могут входить предопределенные классы символов, классы эквивалентности для акцентированных символов, и символы сортировки для трудно вводимых символов. Они определены так, чтобы соответствовать скобкам в регулярных выражениях POSIX.
Подстановка подстановок Unix обрабатывается оболочкой в соответствии с традициями POSIX. Подстановка имен файлов обеспечивается в командной строке и в сценариях оболочки. Утвержденный POSIX оператор case
в оболочках обеспечивает сопоставление шаблонов с использованием глобальных шаблонов.
Некоторые оболочки (например, оболочка C и Bash ) поддерживают дополнительный синтаксис, известный как чередование или расширение скобок. Поскольку он не является частью синтаксиса glob, он не предоставляется в case
. Он раскрывается только в командной строке перед подстановкой.
Оболочка Bash также поддерживает следующие расширения:
extglob
. Такой вариант пришел от кш93. GNU fnmatch и glob имеют одинаковое расширение.**
самостоятельно в качестве компонента имени рекурсивно сопоставлять любое количество уровней нескрытых каталогов. Также поддерживается библиотеками JS и Python glob.dir
с шаблоном glob в IBM PC DOS оболочках Windows в соответствии с DOS традиционно не выполняют никакого раскрытия глобуса в аргументах, передаваемых во внешние программы. Оболочки могут использовать расширение для своих собственных встроенных команд:
[…]
, а для COMMAND.COM *
может появляться только в конце шаблона, но не в начале.Программы Windows и DOS получают длинную строку командной строки вместо параметров в стиле argv, и в их обязанности входит выполнение любого разделения, цитирования или раскрытия глобуса. Технически не существует фиксированного способа описания подстановочных знаков в программах, поскольку они могут делать то, что хотят. Два общих модуля расширения включают:
?
и *
. И ReactOS (crt / misc / getargs.c), и Wine (msvcrt / data.c) содержат совместимую реализацию с открытым исходным кодом __getmainargs
, функции работают под капотом, в их ядре CRT.dcrt0.cc
расширитель командной строки, который использует unix-style glob ()
внутренняя подпрограмма после разделения аргументов.Большинство других частей Windows, включая службу индексирования, используют подстановочные знаки в стиле MS-DOS, найденные в CMD. Этот синтаксис, являющийся пережитком возраста файлов 8.3, уделяет особое внимание точкам в шаблоне и тексте (имя файла). Внутренне это делается с помощью трех дополнительных подстановочных знаков, <>"
. На стороне Windows API эквивалентом glob () является FindFirstFile, а fnmatch () соответствует его базовому RtlIsNameInExpression. (Другой аналог fnmatch - PathMatchSpec.) Оба модуля расширения msvcrt с открытым исходным кодом используют FindFirstFile, поэтому в них также будут применяться особенности имен файлов 8.3.
Оператор SQL LIKE
имеет эквивалент ?
и *
, но не […]
.
Общий подстановочный знак | Подстановочный знак SQL | Описание |
---|---|---|
? | _ | соответствует любому одиночному символу |
* | % | соответствует любому количеству любых символов, включая ни одного |
Стандартное использование SQL синтаксис типа glob для простого сопоставления строк в его операторе LIKE
, хотя термин «glob» обычно не используется в сообществе SQL. Знак процента (%
) соответствует нулю или более символам, а знак подчеркивания (_
) соответствует ровно одному.
Многие реализации SQL расширили оператор LIKE
, чтобы обеспечить более богатый язык сопоставления с образцом, включая диапазоны символов ([…]
), их отрицание и элементы. регулярных выражений.
Globs не включают синтаксис для звезды Kleene, которая допускает многократное повторение предыдущей части выражения; таким образом, они не считаются регулярными выражениями, которые могут описывать полный набор регулярных языков в любом заданном конечном алфавите.
Общий подстановочный знак | Эквивалентное регулярное выражение |
---|---|
? | . |
* | .* |
Globs пытается сопоставить всю строку (например, S *.DOC
соответствует S.DOC и SA.DOC, но не POST.DOC или SURREY.DOCKS), тогда как, в зависимости от деталей реализации, регулярные выражения могут соответствовать подстроке.
Исходная реализация Mozilla proxy auto-config, которая обеспечивает функцию сопоставления глобусов для строк, использует реализацию replace-as-RegExp как над. Синтаксис скобок в таком примере покрывается регулярным выражением.
Python fnmatch использует более сложную процедуру для замены шаблона на регулярное выражение.
Помимо использования в оболочках, шаблоны глобусов также находят применение во множестве языки программирования, в основном для обработки человеческого ввода. Интерфейс в стиле glob для возврата файлов или интерфейс в стиле fnmatch для сопоставления строк можно найти в следующих языках программирования:
globMatch
в модуле std.path
.minimatch
, которая используется внутри npm, и micromatch
, предположительно более оптимизированным, точным и безопасным глобусом. реализация, используемая babel и yarn.Glob
в пакете filepath
.Files
класс, содержащий методы, которые работают с шаблонами глобусов.Glob
с основным модулем System.FilePath.Glob
. Синтаксис шаблона основан на подмножестве Zsh. Он пытается оптимизировать данный шаблон и должен быть заметно быстрее, чем простое посимвольное сопоставление.glob
(как обсуждается в Larry Wall книги Программирование Perl ) и расширение Glob, которое имитирует процедуру BSD glob. Угловые скобки Perl также можно использовать для подстановки: <*.log>
.glob
.glob
в стандартной библиотеке который выполняет сопоставление шаблонов с подстановочными знаками в именах файлов, и модуль fnmatch
с функциями сопоставления строк или списков фильтрации на основе тех же шаблонов подстановочных знаков. Гвидо ван Россум, автор языка программирования Python, написал и предоставил подпрограмму glob
для BSD Unix в 1986 году. Существовали предыдущие реализации glob
, например, в и ftp в предыдущих выпусках BSD.glob
для класса Dir
, который выполняет сопоставление шаблонов с подстановочными знаками в именах файлов. Некоторые библиотеки, такие как Rant и Rake, предоставляют класс FileList
, который имеет метод glob или использует метод FileList.
идентично.GLOB
.