Jump to content

глобус (программирование)

(Перенаправлено с Globbing )

В компьютерном программировании шаблоны glob ( / ɡ l ɒ b / ) определяют наборы имен файлов с подстановочными знаками . Например, оболочки Unix Bash команда mv *.txt textfiles/ перемещает все файлы с именами, заканчивающимися на .txt из текущего каталога в каталог textfiles. Здесь, * является подстановочным знаком и *.txt это шаблон глобуса. Подстановочный знак * означает «любая строка любой длины, включая пустую, но исключая символы-разделители пути ( / в Unix и \ в окнах)".

Другой распространенный подстановочный знак — вопросительный знак ( ?), который обозначает один символ. Например, mv ?.txt shorttextfiles/ переместит все файлы, имена которых состоят из одного символа, за которым следует .txt из текущего каталога в каталог shorttextfiles, пока ??.txt будет соответствовать всем файлам, имя которых состоит из двух символов, за которыми следует .txt.

Помимо сопоставления имен файлов, globs также широко используются для сопоставления произвольных строк ( сопоставление с подстановочными знаками ). В этом качестве общий интерфейс fnmatch.

Источник

[ редактировать ]
Скриншот оригинальной справочной страницы Unix 1971 года для glob - владелец dmr, сокращение от Денниса Ритчи .

Команда glob, сокращение от global от Bell Labs , возникла в самых ранних версиях Unix . [1] Интерпретаторы команд ранних версий Unix (издания с 1-го по 6-е, 1969–1975 гг.) полагались на отдельную программу для расширения символов подстановки в аргументах без кавычек до команды: /etc/glob . Эта программа выполнила расширение и предоставила команде для выполнения расширенный список путей к файлам.

Glob изначально был написан на языке программирования B. Это была первая часть основного программного обеспечения Unix, разработанная на языке программирования высокого уровня . [2] Позже этот функционал был предоставлен как функция библиотеки C , glob(), используемый такими программами, как оболочка . Обычно он определяется на основе функции с именем fnmatch(), которая проверяет, соответствует ли строка заданному шаблону. Программа, использующая эту функцию, может затем перебирать серию строк (обычно имен файлов), чтобы определить, какие из них совпадают. Обе функции являются частью POSIX : функции, определенные в POSIX.1 с 2001 года, и синтаксис, определенный в POSIX.2. [3] [4] Идея определения отдельной функции сопоставления началась с wildmat (сопоставление с подстановочными знаками), простой библиотеки для сопоставления строк с глобусами Bourne Shell.

Традиционно globs не соответствуют скрытым файлам в форме точечных файлов Unix ; чтобы соответствовать им, шаблон должен явно начинаться с .. Например, * соответствует всем видимым файлам, в то время как .* соответствует всем скрытым файлам.

Синтаксис

[ редактировать ]

Наиболее распространенными подстановочными знаками являются *, ?, и […].

Подстановочный знак Описание Пример Матчи Не соответствует
* соответствует любому количеству любых символов, включая ни одного Law* Law, Laws, или Lawyer GrokLaw, La, или aw
*Law* Law, GrokLaw, или Lawyer. La, или aw
? соответствует любому отдельному символу ?at Cat, cat, Bat или bat at
[abc] соответствует одному символу, указанному в скобках [CB]at Cat или Bat cat, bat или CBat
[a-z] соответствует одному символу из диапазона (зависящего от локали), указанного в скобках Letter[0-9] Letter0, Letter1, Letter2 до Letter9 Letters, Letter или Letter10

Обычно символ-разделитель пути ( / в Linux/Unix, MacOS и т. д. или \ в Windows) никогда не будет сопоставлен. Некоторые оболочки, такие как Bash, имеют функцию, позволяющую пользователям обойти это. [5]

Unix-подобный

[ редактировать ]

В Unix-подобных системах *, ? определяется, как указано выше, в то время как […] имеет два дополнительных значения: [6] [7]

Подстановочный знак Описание Пример Матчи Не соответствует
[!abc] соответствует одному символу, который не указан в скобках [!C]at Bat, bat, или cat Cat
[!a-z] соответствует одному символу, который не входит в диапазон, указанный в скобках Letter[!3-5] Letter1, Letter2, Letter6 до Letter9 и Letterx и т. д. Letter3, Letter4, Letter5 или Letterxx

Диапазоны также могут включать предварительно определенные классы символов, классы эквивалентности для символов с диакритическими знаками и символы сопоставления для символов, которые трудно напечатать. Они определены так, чтобы соответствовать скобкам в регулярных выражениях POSIX. [6] [7]

Подстановка Unix обрабатывается оболочкой в ​​соответствии с традициями POSIX. Подстановка имен файлов осуществляется в командной строке и в сценариях оболочки . [8] POSIX-мандат case Оператор в оболочках обеспечивает сопоставление с образцом с использованием шаблонов glob.

Некоторые оболочки (например, оболочка C и Bash ) поддерживают дополнительный синтаксис, известный как чередование или расширение скобок . Поскольку он не является частью синтаксиса glob, он не предусмотрен в case. Он расширяется только в командной строке перед подстановкой.

Оболочка Bash также поддерживает следующие расширения: [9]

  • Расширенное подстановка (extglob): позволяет использовать другие операторы сопоставления шаблонов для сопоставления нескольких вхождений шаблона, заключенного в круглые скобки, по существу обеспечивая недостающую звездочку Клини и чередование для описания обычных языков. Его можно включить, установив extglob вариант оболочки. Эта опция пришла от ksh93. [10] GNU fnmatch и glob имеют идентичное расширение. [3]
  • globstar: позволяет ** сам по себе как компонент имени для рекурсивного сопоставления любого количества слоев нескрытых каталогов. [10] Также поддерживается библиотеками JS и Python . glob

Windows и ДОС

[ редактировать ]
The dir команда с шаблоном glob в IBM PC DOS 1.0.

Оригинальная DOS была клоном CP/M, предназначенным для работы на процессорах Intel 8088 и 8086 . Оболочки Windows, следуя за DOS, традиционно не выполняют каких-либо расширений в аргументах, передаваемых внешним программам. Оболочки могут использовать расширение для своих собственных встроенных команд:

  • Windows PowerShell имеет весь общий синтаксис, определенный, как указано выше, без каких-либо дополнений. [11]
  • COMMAND.COM и cmd.exe имеют большую часть общего синтаксиса с некоторыми ограничениями. […] а для COMMAND.COM * может появиться только в конце шаблона. Он не может располагаться в середине шаблона, кроме как непосредственно перед точкой-разделителем расширения имени файла .

Программы Windows и DOS получают длинную строку командной строки вместо параметров в стиле argv, и они обязаны выполнять любое разделение, заключение в кавычки или расширение glob. Технически не существует фиксированного способа описания подстановочных знаков в программах, поскольку они могут делать все, что пожелают. Два распространенных расширителя глобусов включают в себя: [12]

  • Расширитель командной строки Microsoft C Runtime (msvcrt), который поддерживает только ? и *. [13] И ReactOS (crt/misc/getargs.c), и Wine (msvcrt/data.c) содержат совместимую реализацию с открытым исходным кодом. __getmainargs, функция, работающая под капотом, в основе ЭЛТ.
  • Cygwin MSYS и dcrt0.cc расширитель командной строки, использующий стиль unix glob() рутина под капотом, после разделения аргументов.

Большинство других частей Windows, включая службу индексирования, используют подстановочные знаки в стиле MS-DOS, найденные в CMD. Этот синтаксис, являющийся пережитком эпохи имен файлов 8.3, уделяет особое внимание точкам в шаблоне и тексту (имени файла). Внутренне это делается с использованием трех дополнительных символов подстановки: <>". На стороне Windows API glob() эквивалент FindFirstFile и fnmatch() соответствует своему базовому RtlisNameInExpression . [14] (Другой аналог fnmatch — PathMatchSpec .) Оба расширителя msvcrt с открытым исходным кодом используют FindFirstFile , поэтому в них также будут применяться особенности имен файлов 8.3.

SQL LIKE оператор имеет эквивалент ? и * но не […].

Общий подстановочный знак Подстановочный знак SQL Описание
? _ соответствует любому отдельному символу
* % соответствует любому количеству любых символов, включая ни одного

Стандартный SQL использует синтаксис, подобный glob, для простого сопоставления строк. LIKE оператор, хотя термин «glob» обычно не используется в сообществе SQL. Знак процента ( %) соответствует нулю или более символам и знаку подчеркивания ( _) соответствует ровно одному.

Многие реализации SQL расширили LIKE оператор, позволяющий использовать более богатый язык сопоставления с образцом, включающий диапазоны символов ( […]), их отрицание и элементы регулярных выражений. [15]

По сравнению с регулярными выражениями

[ редактировать ]

Глобы не включают синтаксис звезды Клини , который допускает многократное повторение предыдущей части выражения; таким образом, они не считаются регулярными выражениями , которые могут описать полный набор регулярных языков в любом заданном конечном алфавите. [16]

Общий подстановочный знак Эквивалентное регулярное выражение
? .
* .*

Глобы пытаются сопоставить всю строку (например, S*.DOC соответствует S.DOC и SA.DOC, но не POST.DOC или SURREY.DOCKS), тогда как, в зависимости от деталей реализации, регулярные выражения могут соответствовать подстроке.

Реализация в виде регулярных выражений

[ редактировать ]

Исходная реализация автоматической настройки прокси-сервера Mozilla , которая обеспечивает функцию глобального сопоставления строк, использует реализацию replace-as-RegExp, как указано выше. В таком примере синтаксис скобок покрывается регулярным выражением.

Python fnmatch использует более сложную процедуру для преобразования шаблона в регулярное выражение. [17]

Другие реализации

[ редактировать ]

Помимо использования в оболочках, шаблоны globs также находят применение в различных языках программирования, в основном для обработки человеческого ввода. Интерфейс в стиле glob для возврата файлов или интерфейс в стиле fnmatch для сопоставления строк можно найти в следующих языках программирования:

  • C# имеет несколько библиотек, доступных через NuGet, например Glob. [18] или DotNet.Glob. [19]
  • У Д есть globMatch функционировать в std.path модуль. [20]
  • В JavaScript есть библиотека под названием minimatch который используется внутри npm и micromatch, предположительно более оптимизированная, точная и безопасная реализация подстановки, используемая Babel и Yarn. [21] [22]
  • У Go есть Glob функционировать в filepath упаковка. [23]
  • В Java есть Files класс, содержащий методы, которые работают с шаблонами glob. [24]
  • В Хаскеле есть Glob пакет с основным модулем System.FilePath.Glob. Синтаксис шаблонов основан на подмножестве Zsh . Он пытается оптимизировать заданный шаблон и должен работать заметно быстрее, чем наивное посимвольное сопоставление. [25]
  • В Perl есть оба glob (как описано в Ларри Уолла книге «Программирование на Perl ») и расширение Glob , которое имитирует процедуру glob BSD. [26] Угловые скобки Perl также можно использовать для подстановки: <*.log>.
  • В PHP есть glob функция. [27]
  • У Python есть glob модуль в стандартной библиотеке, который выполняет сопоставление имен файлов с шаблоном подстановочных знаков, [28] и fnmatch модуль с функциями для сопоставления строк или списков фильтрации на основе тех же шаблонов подстановочных знаков. [17] Гвидо ван Россум , автор языка программирования Python, написал и внес свой вклад в glob рутина для BSD Unix в 1986 году. [29] Были предыдущие реализации glob, например, в программах ex и ftp в предыдущих выпусках BSD.
  • У Руби есть glob метод для Dir класс, который выполняет сопоставление имен файлов с шаблоном подстановочных знаков. [30] Некоторые библиотеки, такие как Rant и Rake, предоставляют FileList класс, который имеет метод glob или использует метод FileList.[] одинаково.
  • В Rust есть несколько библиотек, которые могут соответствовать шаблонам glob. [31]
  • SQLite имеет GLOB функция.
  • Tcl содержит функцию подстановки. [32]

См. также

[ редактировать ]
  1. ^ «Раздел «Разное» руководства по Unix первого издания (PDF)» (PDF) . Архивировано из оригинала (PDF) 29 августа 2000 г. Проверено 11 мая 2011 г.
  2. ^ Макилрой, доктор медицины (1987). Читатель Research Unix: аннотированные выдержки из Руководства программиста, 1971–1986 (PDF) (Технический отчет). CSTR. Лаборатории Белла. 139.
  3. ^ Jump up to: а б fnmatch(3) Linux программиста Руководство – Библиотечные функции
  4. ^ glob(3) Linux программиста Руководство – Библиотечные функции
  5. ^ https://www.gnu.org/software/bash/manual/bash.html#Pattern-Matching. Архивировано 15 марта 2018 г. в справочном руководстве Wayback Machine Bash.
  6. ^ Jump up to: а б «Базовые спецификации открытой группы, выпуск 7 IEEE Std 1003.1, издание 2013 г., 2.13. Нотация сопоставления с образцом» . Архивировано из оригинала 27 апреля 2014 г. Проверено 26 октября 2015 г.
  7. ^ Jump up to: а б «Руководство программиста Linux, GLOB(7)» . Архивировано из оригинала 31 октября 2015 г. Проверено 26 октября 2015 г.
  8. ^ «Расширенное руководство по написанию сценариев Bash, глава 19.2: Подстановка имен файлов» (Mendel Cooper, 2003) содержит краткий набор примеров шаблонов подстановки имен файлов.
  9. ^ «Баш-шарики» . База знаний Грега по bash . Архивировано из оригинала 18 ноября 2019 г. Проверено 25 ноября 2019 г.
  10. ^ Jump up to: а б «Сопоставление с образцом» . Справочное руководство по Bash . Архивировано из оригинала 11 февраля 2016 г. Проверено 11 января 2016 г.
  11. ^ «Поддержка подстановочных знаков в параметрах командлета» . Майкрософт . Сеть разработчиков Microsoft.
  12. ^ «Расширение подстановочных знаков» . Сеть разработчиков Microsoft. 2013. Архивировано из оригинала 22 августа 2014 г. Проверено 16 октября 2013 г.
  13. ^ «Расширение подстановочных знаков» . docs.microsoft.com . 08.02.2022.
  14. ^ Подстановочные знаки в Windows. Архивировано 24 декабря 2019 г. на Wayback Machine . Блог разработчиков MSDN.
  15. ^ «LIKE (Transact-SQL)» . 2023-05-23. Архивировано из оригинала 2 августа 2017 г. Проверено 1 августа 2017 г.
  16. ^ Хопкрофт, Джон Э.; Мотвани, Раджив; Уллман, Джеффри Д. (2000). Введение в теорию автоматов, языки и вычисления (2-е изд.). Аддисон-Уэсли.
  17. ^ Jump up to: а б "Lib/fnmatch.py" . Питон. 20 января 2021 г. Архивировано из оригинала 10 ноября 2021 г. Проверено 10 ноября 2021 г.
  18. ^ "ктомпсон/глоб" . Гитхаб . Архивировано из оригинала 26 октября 2020 г. Проверено 6 ноября 2020 г.
  19. ^ "дазинатор/dotnet.glob" . Гитхаб . Архивировано из оригинала 22 июня 2022 г. Проверено 22 июня 2022 г.
  20. ^ «std.path — Язык программирования D — Digital Mars» . dlang.org. Архивировано из оригинала 8 сентября 2014 г. Проверено 8 сентября 2014 г.
  21. ^ "исаакс/миниматч" . Гитхаб . Архивировано из оригинала 28 июля 2016 г. Проверено 10 августа 2016 г.
  22. ^ «йоншлинкерт/микроматч» . Гитхаб . Архивировано из оригинала 11 февраля 2016 г. Проверено 4 апреля 2017 г.
  23. ^ «Путь к файлу пакета — язык программирования Go» . Голанг.орг. Архивировано из оригинала 25 мая 2011 г. Проверено 11 мая 2011 г.
  24. ^ «Операции с файлами» . Оракул. Архивировано из оригинала 20 сентября 2013 г. Проверено 16 декабря 2013 г.
  25. ^ «Glob-0.7.4: Библиотека подстановки» . Архивировано из оригинала 8 мая 2014 г. Проверено 7 мая 2014 г.
  26. ^ «File::Glob — расширение Perl для подпрограммы BSD glob» . perldoc.perl.org . Проверено 11 мая 2011 г.
  27. ^ "glob - Руководство" . PHP. 06 мая 2011 г. Архивировано из оригинала 13 ноября 2017 г. Проверено 11 мая 2011 г.
  28. ^ «10.7. glob — расширение шаблона пути в стиле Unix — документация Python v2.7.1» . Документы.python.org. Архивировано из оригинала 16 мая 2011 г. Проверено 11 мая 2011 г.
  29. ^ « Библиотечная процедура «подстановки»» . Архивировано из оригинала 19 декабря 2007 г. Проверено 11 мая 2011 г.
  30. ^ «Класс: Режиссёр» . Ruby-doc.org. Архивировано из оригинала 15 мая 2011 г. Проверено 11 мая 2011 г.
  31. ^ "#glob - Lib.rs" . lib.rs. Архивировано из оригинала 12 ноября 2021 г. Проверено 12 ноября 2021 г.
  32. ^ «Страница руководства TCL glob» . Архивировано из оригинала 8 декабря 2011 г. Проверено 16 ноября 2011 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 10969acb950b790065c1a8c79d75b997__1717780740
URL1:https://arc.ask3.ru/arc/aa/10/97/10969acb950b790065c1a8c79d75b997.html
Заголовок, (Title) документа по адресу, URL1:
glob (programming) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)