글로브 패턴에서 "[--0]"의 의미

글로브 패턴에서 "[--0]"의 의미

나는 "Glob"과 "Globing Pathnames"에 대해 읽고 있었는데 (나에게) 이상한 부분을 발견했습니다.매뉴얼 페이지:

"[--0]"은 "-", ".", "0" 세 문자와 일치합니다. "/"는 일치할 수 없기 때문입니다.

혼란스러워요! 두 개의 대시와 하나의 일치 0는 어떻습니까 .? 여기서 캐릭터는 어떤 역할을 합니까 /? 이것은 매뉴얼 페이지의 버그입니까?

답변1

단락 시작 부분에서 설명했듯이그 매뉴얼 페이지, '-' 특징,두 문자 사이에 위치할 때는 일련의 문자를 나타내고 "-" 문자는대괄호 사이의 첫 번째 또는 마지막 문자로 배치되는 경우, 문자 그대로의 의미를 갖습니다. 따라서 첫 번째 대시는 실제로 "-" 문자를 나타내고 두 번째 대시는 범위 지정자입니다. 따라서 전체 패턴은 "-"와 "0" 사이의 모든 문자로 구성됩니다. C/POSIX 로케일(일반적으로 다른 로케일은 아님)에서는 다음과 같습니다.

-
.
/
0

그리고'/'는 일치할 수 없기 때문에, 이 패턴은 "-", ".", "0" 세 문자와 일치합니다.

답변2

이는 매뉴얼 페이지 자체와는 아무 관련이 없습니다. 이는 현재 보고 있는 매뉴얼 페이지에 관한 glob 패턴 구문에 대한 설명입니다.

glob 모드에서는 대괄호로 문자 집합을 구분합니다. 예를 들어 [abc]임의의 문자 a또는 b와 일치합니다 c. 이 패턴은 , 및 와 fo[abc]일치합니다 (그러나 , 또는 , 또는 는 일치하지 않음 ).foafobfocfoofofoab

괄호 안의 문자는 -특별한 의미를 갖습니다. 즉, 문자 범위를 형성하는 데 사용됩니다. 따라서 0, 또는 일치하는 대신 -패턴은 모든 숫자와 일치합니다. 범위는 다른 범위 및 개별 문자와 결합될 수 있습니다. 예를 들어 ASCII 인코딩의 모든 문자 또는 밑줄과 일치합니다.9[0-9][A-Za-z_]

마이너스 기호는 구문상 정렬된 경우에만 범위 표시기로 해석됩니다. -즉, 마이너스 기호가 대괄호 안의 첫 번째 또는 마지막 문자이거나 다른 범위 바로 뒤에 오는 경우입니다. 따라서 [--0]에서 첫 번째는 -자신을 나타내고 두 번째는 범위 표시기이므로 이 패턴은 -현재 로케일 안과 -사이의 모든 문자 와 일치합니다.0

내부에ASCII 코드인코딩, 범위는 다음 4개 문자를 포함합니다: -, ., /, 0. 이 문자는 /항상 디렉터리 구분 기호로 해석되므로 파일 이름에 나타날 수 없습니다. 따라서 패턴은 , 및 [--0]3개 문자만 일치합니다 .-.0

ASCII 이외의 로케일에서는 패턴이 다른 문자 세트와 일치할 수 있습니다.로케일 설정이 문자 범위에 미치는 영향시스템과 애플리케이션 간에는 일정한 차이가 있습니다.

대부분의 정규식 엔진은 문자 범위에 대해 쉘 glob 패턴과 동일한 구문을 사용하지만 두 가지 차이점이 있습니다.

  • glob 패턴에서 여는 괄호 뒤의 첫 번째 문자가 a이면 !패턴은 모든 문자와 일치합니다.아니요컬렉션에서. 정규식에서 문자는 ^동일한 역할을 합니다. 일부 쉘 ^도 이것을 지원합니다 !.
  • 일부 정규식 변형을 사용하면 다음 문자가 일치 또는 일치 \와 같은 특별한 의미를 잃을 수 있습니다 . 다른 정규식 변형 및 glob 패턴에서 문자 집합의 백슬래시는 특별한 의미가 없습니다. 집합에 있는 경우 먼저 와야 합니다(빈 집합을 지정할 수 없습니다. 닫는 대괄호 또는 그 뒤에 나타나는 문자와 일치하는 불완전한 패턴입니다).[\[\]\-a][]-a][]

관련 정보