나는 "Glob"과 "Globing Pathnames"에 대해 읽고 있었는데 (나에게) 이상한 부분을 발견했습니다.매뉴얼 페이지:
"[--0]"은 "-", ".", "0" 세 문자와 일치합니다. "/"는 일치할 수 없기 때문입니다.
혼란스러워요! 두 개의 대시와 하나의 일치 0
는 어떻습니까 .
? 여기서 캐릭터는 어떤 역할을 합니까 /
? 이것은 매뉴얼 페이지의 버그입니까?
답변1
단락 시작 부분에서 설명했듯이그 매뉴얼 페이지, '-' 특징,두 문자 사이에 위치할 때는 일련의 문자를 나타내고 "-" 문자는대괄호 사이의 첫 번째 또는 마지막 문자로 배치되는 경우, 문자 그대로의 의미를 갖습니다. 따라서 첫 번째 대시는 실제로 "-" 문자를 나타내고 두 번째 대시는 범위 지정자입니다. 따라서 전체 패턴은 "-"와 "0" 사이의 모든 문자로 구성됩니다. C/POSIX 로케일(일반적으로 다른 로케일은 아님)에서는 다음과 같습니다.
-
.
/
0
그리고'/'는 일치할 수 없기 때문에, 이 패턴은 "-", ".", "0" 세 문자와 일치합니다.
답변2
이는 매뉴얼 페이지 자체와는 아무 관련이 없습니다. 이는 현재 보고 있는 매뉴얼 페이지에 관한 glob 패턴 구문에 대한 설명입니다.
glob 모드에서는 대괄호로 문자 집합을 구분합니다. 예를 들어 [abc]
임의의 문자 a
또는 b
와 일치합니다 c
. 이 패턴은 , 및 와 fo[abc]
일치합니다 (그러나 , 또는 , 또는 는 일치하지 않음 ).foa
fob
foc
foo
fo
foab
괄호 안의 문자는 -
특별한 의미를 갖습니다. 즉, 문자 범위를 형성하는 데 사용됩니다. 따라서 0
, 또는 일치하는 대신 -
패턴은 모든 숫자와 일치합니다. 범위는 다른 범위 및 개별 문자와 결합될 수 있습니다. 예를 들어 ASCII 인코딩의 모든 문자 또는 밑줄과 일치합니다.9
[0-9]
[A-Za-z_]
마이너스 기호는 구문상 정렬된 경우에만 범위 표시기로 해석됩니다. -
즉, 마이너스 기호가 대괄호 안의 첫 번째 또는 마지막 문자이거나 다른 범위 바로 뒤에 오는 경우입니다. 따라서 [--0]
에서 첫 번째는 -
자신을 나타내고 두 번째는 범위 표시기이므로 이 패턴은 -
현재 로케일 안과 -
사이의 모든 문자 와 일치합니다.0
내부에ASCII 코드인코딩, 범위는 다음 4개 문자를 포함합니다: -
, .
, /
, 0
. 이 문자는 /
항상 디렉터리 구분 기호로 해석되므로 파일 이름에 나타날 수 없습니다. 따라서 패턴은 , 및 [--0]
3개 문자만 일치합니다 .-
.
0
ASCII 이외의 로케일에서는 패턴이 다른 문자 세트와 일치할 수 있습니다.로케일 설정이 문자 범위에 미치는 영향시스템과 애플리케이션 간에는 일정한 차이가 있습니다.
대부분의 정규식 엔진은 문자 범위에 대해 쉘 glob 패턴과 동일한 구문을 사용하지만 두 가지 차이점이 있습니다.
- glob 패턴에서 여는 괄호 뒤의 첫 번째 문자가 a이면
!
패턴은 모든 문자와 일치합니다.아니요컬렉션에서. 정규식에서 문자는^
동일한 역할을 합니다. 일부 쉘^
도 이것을 지원합니다!
. - 일부 정규식 변형을 사용하면 다음 문자가 일치 또는 일치
\
와 같은 특별한 의미를 잃을 수 있습니다 . 다른 정규식 변형 및 glob 패턴에서 문자 집합의 백슬래시는 특별한 의미가 없습니다. 집합에 있는 경우 먼저 와야 합니다(빈 집합을 지정할 수 없습니다. 닫는 대괄호 또는 그 뒤에 나타나는 문자와 일치하는 불완전한 패턴입니다).[\[\]\-a]
[
]
-
a
]
[]