glob(프로그래밍)
glob (programming)컴퓨터 프로그래밍에서 glob(/"l"b/") 패턴은 와일드카드 문자로 파일 이름 집합을 지정합니다.예를 들어 Unix Bash 셸 명령어mv *.txt textfiles/
이동(mv
) 이름이 로 끝나는 모든 파일.txt
현재 디렉토리에서 디렉토리로textfiles
.여기서,*
는 "/를 제외한 임의의 문자열"을 나타내는 와일드카드입니다.*.txt
글로벌 패턴입니다.또 다른 일반적인 와일드카드는 물음표입니다.?
)는 1글자를 나타냅니다.예를들면,mv ?.txt shorttextfiles/
이름이 붙은 모든 파일을 한 글자로 이동하고, 그 뒤에.txt
현재 디렉토리에서 디렉토리로shorttextfiles
,하는 동안에??.txt
이름이 2글자 뒤에 이어지는 모든 파일과 일치합니다..txt
.
파일명의 매칭에 가세해, 글로브는 임의의 문자열의 매칭(와일드 카드 매칭)에도 폭넓게 사용됩니다.이 용량에서 공통 인터페이스는fnmatch
.
기원.
glob 명령어는 global의 줄임말로 Bell Labs의 [1]Unix의 초기 버전에서 유래했습니다.Unix의 초기 버전(1st~6th Editions, 1969~1975)의 명령어 인터프리터는 따옴표가 없는 인수의 와일드카드 문자를 /etc/glob 명령어로 확장하기 위해 별도의 프로그램에 의존했습니다.이 프로그램은 확장을 수행하고 파일 경로의 확장된 목록을 명령을 실행할 수 있도록 제공했습니다.
글로브는 원래 B프로그래밍 언어로 쓰여졌다.이것은 고급 프로그래밍 [2]언어로 개발된 최초의 메인라인 유닉스 소프트웨어이다.나중에 이 기능은 C 라이브러리 함수로 제공되었습니다.glob()
셸 등의 프로그램에서 사용됩니다.이것은 보통 다음과 같은 함수에 기반하여 정의됩니다.fnmatch()
문자열이 특정 패턴과 일치하는지 여부를 테스트합니다.이 기능을 사용하는 프로그램은 일련의 문자열(보통 파일 이름)을 반복하여 일치하는 문자열을 판별할 수 있습니다.두 함수는 모두 POSIX의 일부입니다. 2001년 이후 POSIX.1에서 정의된 함수와 POSIX.[3][4]2에서 정의된 구문입니다.별도의 일치 함수를 정의하는 아이디어는 Bourne Shell globs에 문자열을 일치시키는 단순한 라이브러리인 wildmat(와일드카드 일치)에서 시작되었습니다.
일반적으로 globs는 Unix 닷파일 형식의 숨겨진 파일과 일치하지 않습니다.이들과 일치시키려면 패턴은 명시적으로 다음 문자로 시작해야 합니다..
.예를들면,*
표시되는 모든 파일을 대조합니다..*
는 모든 숨겨진 파일과 일치합니다.
구문
가장 일반적인 와일드카드는*
,?
,그리고.[…]
.
와일드카드 | 묘사 | 예 | 일치. | 일치하지 않음 |
---|---|---|---|---|
* | none을 포함한 임의의 수의 문자와 일치합니다. | Law* | Law ,Laws , 또는Lawyer | GrokLaw ,La , 또는aw |
*Law* | Law ,GrokLaw , 또는Lawyer . | La , 또는aw | ||
? | 임의의 단일 문자와 일치합니다. | ?at | Cat ,cat ,Bat 또는bat | at |
[abc] | 괄호로 둘러싸인1 문자와 일치합니다. | [CB]at | Cat 또는Bat | cat ,bat 또는CBat |
[a-z] | 괄호로 둘러싸인 (소문자 의존) 범위의 1글자와 일치합니다. | Letter[0-9] | Letter0 ,Letter1 ,Letter2 까지Letter9 | Letters ,Letter 또는Letter10 |
통상은 패스 구분 문자(/
Linux/Unix, MacOS 등 또는\
Windows 의 경우)는 일치하지 않습니다.Bash 등의 일부 셸에는 사용자가 이를 회피할 수 있는 기능이 있습니다.[5]
Unix와 같은
Unix와 유사한 시스템*
,?
상기와 같이 정의되어 있습니다.[…]
에는 다음 두 가지 [6][7]다른 의미가 있습니다.
와일드카드 | 묘사 | 예 | 일치. | 일치하지 않음 |
---|---|---|---|---|
[!abc] | 괄호로 둘러싸지 않은1개의 문자와 일치합니다. | [!C]at | Bat ,bat , 또는cat | Cat |
[!a-z] | 괄호로 둘러싸인 범위에 포함되지 않은1 문자와 일치합니다. | Letter[!3-5] | Letter1 ,Letter2 ,Letter6 까지Letter9 그리고.Letterx 기타. | Letter3 ,Letter4 ,Letter5 또는Letterxx |
범위에는 미리 정의된 문자 클래스, 악센트 문자에 대한 동등성 클래스 및 입력하기 어려운 문자에 대한 대조 기호도 포함될 수 있습니다.POSIX 정규 [6][7]표현에서 괄호와 일치하도록 정의되어 있습니다.
Unix Globing은 POSIX의 전통에 따라 셸에 의해 처리됩니다.글로벌화는 명령줄 및 셸 [8]스크립트의 파일 이름에 제공됩니다.POSIX에 의해 지정case
셸 내의 스테이트먼트는 글로벌 패턴을 사용하여 패턴을 검출합니다.
일부 셸(C 쉘 및 Bash 등)은 교대 또는 가새 확장이라고 하는 추가 구문을 지원합니다.glob 구문의 일부가 아니기 때문에 에 기재되어 있지 않습니다.case
글로벌화 전 명령줄에서만 확장됩니다.
Bash 쉘은 다음 [9]확장도 지원합니다.
- 확장글로빙(extglob): 다른 패턴 매칭 연산자를 사용하여 괄호로 둘러싸인 패턴의 여러 오카렌을 일치시킬 수 있습니다.기본적으로 누락된 클렌별과 정규 언어를 기술하기 위한 교체를 제공합니다.이 기능을 유효하게 하려면 ,
extglob
셸 옵션이 옵션은 ksh93에서 [10]제공되었습니다.GNU fnmatch와 glob의 [3]확장자는 동일합니다. - globstar: 허용
**
숨김이 없는 [10]디렉토리의 임의의 레이어를 재귀적으로 일치시키는 이름 구성요소로 사용됩니다.JS 라이브러리와 Python의 Glob에서도 지원됩니다.
Windows 및 DOS
원래의 DOS는 인텔의 8088 및 8086 프로세서에서 동작하도록 설계된 CP/M의 클론입니다.DOS에 이은 Windows 쉘은 일반적으로 외부 프로그램에 전달되는 인수에서 글로벌 확장을 수행하지 않습니다.셸은 자체 빌트인 명령에 확장을 사용할 수 있습니다.
- Windows PowerShell에는 추가 [11]없이 위에서 설명한 대로 모든 공통 구문이 정의되어 있습니다.
- 명령어COM 및 cmd.exe에는 일반적인 구문이 대부분 있지만 다음과 같은 제한이 있습니다.거기에는 없다
[…]
및 COMMAND의 경우.COM 더*
패턴의 끝에만 표시될 수 있습니다.파일 이름 확장자 구분 도트 바로 앞 이외에는 패턴 중간에 표시할 수 없습니다.
Windows 및 DOS 프로그램은 argv 스타일의 파라미터 대신 긴 명령줄 문자열을 수신하며 분할, 견적 또는 글로벌 확장을 수행합니다.와일드카드는 자유롭게 할 수 있기 때문에 프로그램에서 와일드카드를 기술하는 방법은 기술적으로 정해져 있지 않습니다.일반적인 글로벌 익스팬더에는 다음 두 가지가 있습니다.[12]
- Microsoft C Runtime(msvcrt) 명령줄 익스팬더에서는
?
그리고.*
ReactOS(crt/misc/getargs.c)와 Wine(msvcrt/data.c) 모두 호환성이 있는 오픈 소스 구현을 포함하고 있습니다.[13]__getmainargs
핵심 CRT에서 후드 아래에서 작동하는 기능을 제공합니다. - Cygwin과 MSYS
dcrt0.cc
명령줄 익스팬더(unix-style 사용)glob()
언쟁을 나눈 후 일상적으로 잠입하는 거죠
인덱싱 서비스를 포함한 Windows의 대부분의 다른 부분에서는 CMD에 있는 MS-DOS 스타일의 와일드카드를 사용합니다. 8.3 파일 이름 사용 기간의 유물로, 이 구문은 패턴의 점이나 텍스트(파일 이름)에 특히 주의를 기울입니다.내부적으로 이 작업은 3개의 추가 와일드카드 문자를 사용하여 수행됩니다.<>"
. Windows API 끝에서는glob()은 FindFirstFile에 상당하며 fnmatch()는 기반이 되는 RtlIsNameInExpression에 [14]대응합니다(다른 fnmatch 유사체는 PathMatchSpec입니다).오픈 소스 msvcrt 익스팬더 모두 Find First File을 사용하기 때문에 8.3 파일명 쿼리가 적용됩니다.
SQL
SQL LIKE
연산자는 와 동등하다.?
그리고.*
하지만 아니다[…]
.
공통 와일드카드 | SQL 와일드카드 | 묘사 |
---|---|---|
? | _ | 임의의 단일 문자와 일치합니다. |
* | % | none을 포함한 임의의 수의 문자와 일치합니다. |
표준 SQL은 글로벌한 구문을 사용하여 간단한 문자열 매칭을 수행합니다.LIKE
연산자. 단, SQL 커뮤니티에서는 일반적으로 "glob"이라는 용어를 사용하지 않습니다.퍼센트 기호(%
)는 0 이상의 문자와 밑줄( )과 일치합니다._
)는 1개만 일치합니다.
SQL의 많은 구현으로 인해LIKE
연산자는 문자 범위를 통합하여 보다 풍부한 패턴 인식 언어를 사용할 수 있습니다([…]
)의 부정 및 정규 [15]표현 요소.
정규 표현과 비교해서
globs에는 Kleene 스타의 구문이 포함되어 있지 않기 때문에 정규 표현으로 간주되지 않으며, 정규 표현은 임의의 유한 알파벳에 걸쳐 [16]정규 언어의 전체 집합을 나타낼 수 있습니다.
공통 와일드카드 | 등가 정규식 |
---|---|
? | . |
* | .* |
Globs는 문자열 전체를 대조합니다(예를 들어,S*.DOC
S와 일치합니다.델 텔레폰 어드바이저와 SADOC, 그러나 POST는 하지 않는다.DOC 또는 SURREY.DOKS)의 경우 구현 세부사항에 따라 정규 표현은 하위 문자열과 일치할 수 있습니다.
정규 표현으로 구현
문자열에 글로벌 매칭 기능을 제공하는 원래의 Mozilla 프록시 자동 구성 구현에서는 위와 같이 Replace-as-RegExp 구현을 사용합니다.이러한 예에서 괄호 구문은 regex에서 다루어집니다.
Python의 fnmatch는 보다 정교한 [17]절차를 사용하여 패턴을 정규 표현으로 변환합니다.
기타 구현
글로브 패턴은 셸에서의 사용 이외에도 다양한 프로그래밍 언어에서 주로 인간의 입력을 처리하기 위해 사용됩니다.파일을 반환하기 위한 글로벌 스타일인터페이스 또는 문자열을 대조하기 위한 fnmatch 스타일인터페이스는 다음 프로그래밍 언어로 제공됩니다.
- C#에는 NuGet을 통해 다음과 같은 여러 라이브러리를 사용할 수 있습니다.
Glob
또는[18]DotNet.Glob
를 클릭합니다.[19] - D는
globMatch
에서 기능하다std.path
모듈로 이동합니다.[20] - JavaScript에는 다음과 같은 라이브러리가 있습니다.
minimatch
npm에 의해 내부적으로 사용되고 있습니다.micromatch
바벨과 [21][22]실이 사용하는 보다 최적화되고 정확하며 안전한 글로빙 구현입니다. - 바둑에는 다음이 있습니다.
Glob
에서 기능하다filepath
패키지.[23] - Java에는
Files
glob [24]패턴으로 동작하는 메서드를 포함하는 클래스입니다. - Haskell은
Glob
메인 모듈 패키지System.FilePath.Glob
패턴 구문은 Zsh의 서브셋을 기반으로 합니다.이것은, 소정의 패턴을 최적화하려고 하고 있어, 문자마다의 순진한 [25]매처보다 현저하게 고속이 됩니다. - Perl에는 양쪽이 있습니다.
glob
(Larry Wall의 저서 Programming Perl에서 설명한 바와 같이) 및 BSD 글로벌 [26]루틴을 모방한 글로브 확장입니다.Perl의 꺾쇠 괄호는 글로벌에도 사용할 수 있습니다.<*.log>
. - PHP에는
glob
기능합니다.[27] - Python은
glob
파일명에 와일드카드 패턴 [28]매칭을 실행하는 표준 라이브러리의 모듈 및fnmatch
동일한 와일드카드 [17]패턴을 기반으로 스트링 또는 필터링 목록을 대조하는 기능이 있는 모듈.파이썬 프로그래밍 언어의 저자인 Guido van Rossum은 글을 쓰고 기고했다.glob
1986년에 [29]BSDUnix에 루틴으로 등록했습니다.이전에 구현한 것이 있습니다.glob
(예: 이전 BSD 릴리스의 ex 및 ftp 프로그램). - 루비는
glob
의 방법Dir
파일 [30]이름에 대해 와일드카드 패턴 조회를 실행하는 클래스입니다.Rant 및 Rake와 같은 여러 라이브러리는FileList
glob 메서드를 가지거나 사용하는 클래스FileList.[]
똑같이 - 러스트에는 글로벌 [31]패턴과 일치하는 라이브러리가 여러 개 있습니다.
- SQLite에는
GLOB
기능. - TCL에는 글로벌 [32]시설이 있습니다.
「 」를 참조해 주세요.
레퍼런스
- ^ "First Edition Unix manual 'Miscellaneous' section (PDF)" (PDF). Archived from the original (PDF) on 2000-08-29. Retrieved 2011-05-11.
- ^ McIlroy, M. D. (1987). A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986 (PDF) (Technical report). CSTR. Bell Labs. 139.
- ^ a b Linux 프로그래머 매뉴얼– 라이브러리 기능 –
- ^ Linux 프로그래머 매뉴얼– 라이브러리 기능 –
- ^ [https://www.gnu.org/software/bash/manual/bash.html#Pattern-Matching Bash 레퍼런스 매뉴얼]
- ^ a b "The Open Group Base Specifications Issue 7 IEEE Std 1003.1, 2013 Edition, 2.13. Pattern Matching Notation".
- ^ a b "Linux Programmer's Manual, GLOB(7)".
- ^ "Advanced Bash-Scripting Guide, Chapter 19.2: Globing"(Mendel Cooper, 2003)에는 파일명 글로벌 패턴의 간결한 예가 있습니다.
- ^ "Bash globs". greg's bash knowledgebase. Retrieved 2019-11-25.
- ^ a b "Pattern Matching". Bash Reference Manual.
- ^ "Supporting Wildcard Characters in Cmdlet Parameters". Microsoft. Microsoft Developer Network.
- ^ "Wildcard Expansion". Microsoft Developer Network. 2013.
- ^ "Wildcard Expansion". docs.microsoft.com.
- ^ Windows 의 와일드 카드.MSDN 개발 블로그
- ^ "LIKE (Transact-SQL)".
- ^ Hopcroft, John E.; Motwani, Rajeev; Ullman, Jeffrey D. (2000). Introduction to Automata Theory, Languages, and Computation (2nd ed.). Addison-Wesley.
- ^ a b "Lib/fnmatch.py". Python. 2021-01-20. Retrieved 2021-11-10.
- ^ "kthompson/glob". GitHub. Retrieved 2020-11-06.
- ^ "dazinator/dotnet.glob". GitHub. Retrieved 2022-06-22.
- ^ "std.path - D Programming Language - Digital Mars". dlang.org. Retrieved 2014-09-08.
- ^ "isaacs/minimatch". GitHub. Retrieved 2016-08-10.
- ^ "jonschlinkert/micromatch". GitHub. Retrieved 2017-04-04.
- ^ "Package filepath - The Go Programming Language". Golang.org. Retrieved 2011-05-11.
- ^ "File Operations". Oracle. Retrieved 2013-12-16.
- ^ "Glob-0.7.4: Globbing library". Retrieved 2014-05-07.
- ^ "File::Glob - Perl extension for BSD glob routine". perldoc.perl.org. Retrieved 2011-05-11.
- ^ "glob - Manual". PHP. 2011-05-06. Retrieved 2011-05-11.
- ^ "10.7. glob — Unix style pathname pattern expansion — Python v2.7.1 documentation". Docs.python.org. Retrieved 2011-05-11.
- ^ "'Globbing' library routine". Archived from the original on 2007-12-19. Retrieved 2011-05-11.
- ^ "Class: Dir". Ruby-doc.org. Retrieved 2011-05-11.
- ^ "#glob - Lib.rs". lib.rs. Retrieved 2021-11-12.
{{cite web}}
: CS1 maint :url-status (링크) - ^ "TCL glob manual page". Retrieved 2011-11-16.