Bash: 일치를 수행하는 인수 확장의 맥락에서 "패턴 일치"와 "파일 이름 확장"의 차이점

Bash: 일치를 수행하는 인수 확장의 맥락에서 "패턴 일치"와 "파일 이름 확장"의 차이점

편집하다:Gordon Davidson의 의견이 질문에 대한 답변입니다.

저는 GNU Bash 매뉴얼을 읽으면서 패턴 일치에 사용할 수 있는 기본적으로 세 가지 유형의 "매개변수 확장"이 있다는 것을 발견했습니다.

  1. ${parameter#word} ${parameter##word}
  2. ${parameter%word} ${parameter%%word}
  3. ${parameter/pattern/string} ${parameter//pattern/string} ${parameter/#pattern/string} ${parameter/%pattern/string}

처음 두 가지를 다음과 같이 설명하는 것이 이상하다고 생각합니다.

단어가 확장되어 패턴을 생성하고 아래 설명된 규칙에 따라 일치됩니다(패턴 일치 참조).

그러나 세 번째는 다음과 같이 설명됩니다.

파일 이름 확장과 마찬가지로 패턴을 확장하여 패턴을 생성합니다. [...] 일치는 아래 설명된 규칙에 따라 수행됩니다(패턴 일치 참조).

확장 프로그램 간에 실제로 차이가 있는지 궁금합니다. 처음 두 설명에서는 어떤 종류의 확장이 수행되는지 완전히 명확하지 않지만 이에 관계없이 "패턴 일치" 규칙은 실제로 "파일 이름 확장"과 동일합니다.

그렇다면 문서가 충분히 명확하지 않아서 문제일 수도 있고 모두 동일하다고 말할 수 있을까요?

내 생각에는 처음 두 설명이 더 정확할 것 같습니다. 세 번째 설명에서는 실제 파일 시스템 검사가 수행되는지 의심스럽기 때문입니다.

답변1

a*k패턴 매칭이란 패턴 매칭이라는 개념을 말합니다 aardvark.

파일 이름 확장자사용패턴 매칭. 파일 시스템에서 디렉토리 항목을 검색하여 주어진 패턴과 일치하는 이름을 수집합니다.

셸에서 패턴 일치는 단순한 파일 이름 확장 이상의 용도로 사용됩니다. 예를 들어, Case 문에서 다음과 같습니다.

case $file in
  *.jpg ) do something with jpg file 
          ;;
  *.gif ) do something with gif file
          ;;
  * ) fallback case
      ;;
esac

globfnmatchPOSIX는 각각 파일 이름 확장과 패턴 일치를 수행하는 및 라는 두 개의 C 라이브러리 함수를 정의합니다 . 그들 사이에는 몇 가지 차이점이 있습니다. (셸 구현은 반드시 이러한 함수를 사용하는 것은 아니지만 자체 패턴 일치 및 파일 확장을 구현합니다.)

관련 정보