편집하다:Gordon Davidson의 의견이 질문에 대한 답변입니다.
저는 GNU Bash 매뉴얼을 읽으면서 패턴 일치에 사용할 수 있는 기본적으로 세 가지 유형의 "매개변수 확장"이 있다는 것을 발견했습니다.
${parameter#word} ${parameter##word}
${parameter%word} ${parameter%%word}
${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
glob
fnmatch
POSIX는 각각 파일 이름 확장과 패턴 일치를 수행하는 및 라는 두 개의 C 라이브러리 함수를 정의합니다 . 그들 사이에는 몇 가지 차이점이 있습니다. (셸 구현은 반드시 이러한 함수를 사용하는 것은 아니지만 자체 패턴 일치 및 파일 확장을 구현합니다.)