답변:
*.*
오래된 Windows / DOS 시스템에서 해석여기서의 중요성은 Unix / Linux보다 Windows / DOS와 더 관련이 있습니다. 오래된 Windows / DOS 시스템에서는 '와일드 카드'패턴이었습니다. 와일드 카드 패턴은 Unix globs와 비슷한 방식으로 파일 이름을 일치시키는 데 사용되었습니다. *.*
와일드 카드는 일반적으로 모든 파일을 일치시키는 데 사용되었다.
Unix glob와 마찬가지로 *
파일 이름의 모든 문자 *
와 일치합니다. 파일 자체 와 도 일치합니다. 그러나 *.*
파일 이름과 일치하는 이유 는 이러한 와일드 카드의 작동 방식이 다르기 때문입니다. 이 기사 에 따르면 :
별표 뒤에 오는 점 이외의 문자는 효과가 없습니다. 별표가 커서를 위치 12로 이동하면 점을 제외하고 구문 분석 상태가 바뀌지 않으므로 마지막 세 위치가 지워지고 커서가 이동합니다.
이 동작 (유닉스 관점과는 다소 다른 점)은 a 다음의 점이 *
실제로 점과 일치하지 않지만 패턴에 더 많은 문자를 추가 할 수있는 해킹 방법 일뿐입니다. 이것은 다른 것을 추가하면 *
이 마지막 세 위치의 모든 항목과 일치 한다는 것을 의미합니다 .
이 구문은 8.3 파일 이름 이 필요한 Windows 95 이전의 DOS 및 이전 Windows 시스템에서 구문이 사용되었다는 것을 고려할 때 좀 더 의미가 있습니다 . 이 파일 이름에는 점 뒤에 하나의 점과 최대 3 개의 문자 만 사용할 수있었습니다. 대부분의 경우 시스템의 모든 파일이 세 자로 된 확장명을 가지지 않는다면 (기술적으로 짧거나 확장명이 허용되지 않더라도) 어떤 식 으로든 *.*
파일을 일치시키는 데 사용 하는 것이 합리적이라고 생각 합니다 (적어도 뒤틀린 Windowsey 논리 관점에서) ).
*.*
유닉스 쉘에서의 해석유닉스 쉘에서 다른 사람들이 지적했듯이 이것은 '경로 확장'또는 '글로브'를 나타냅니다. 은 *
이 무시되고 다음 문자로 이어질하지 않습니다 따라서 최종 행동에 어떤 이상한 점프를 가지고 있지 않습니다. *.*
패턴은 점을 포함하는 모든 파일 이름과 일치합니다 (시작 부분 제외). 유닉스 / 리눅스 시스템 에는 확장자 가없는 파일이 많기 때문에 (혹은 이것이 허용되기 때문에 점이 포함되어 있기 때문에) 어떤 파일과도 일치 하지 않을 것입니다.
*.*
Unix에서 파일 이름이 시작될 때 점이 일치하지 않는 이유 는 시작 부분에 점을 두는 것이 파일이 '숨겨지고'숨겨진 파일이 기본적으로 glob에서 제외되기 때문입니다. POSIX 셸에서 일치 시키려면 패턴 시작 부분에 점을 명시 적으로 배치해야합니다. 에서 쉘 옵션을 설정할 수 있습니다 또는 변수가 적절하게 설정 될 수 있지만, 이것은 또 다른 질문입니다!bash
dotglob
GLOBIGNORE
그것은 glob
bash에 있으며, 아래는 bash 매뉴얼에서 인용 한 것입니다.
강타-GNU Bourne-Again SHell
*
null 문자열을 포함하여 모든 문자열과 일치합니다. globstar 쉘 옵션이 사용 가능
*
하고 경로 이름 확장 컨텍스트에서*s
사용되는 경우, 단일 패턴으로 사용 된 두 개의 인접 파일은 모든 파일 및 0 개 이상의 디렉토리 및 서브 디렉토리와 일치합니다. 뒤에 a가 오는 경우/
인접한 두*s
디렉토리 만 디렉토리 및 하위 디렉토리와 일치합니다.
이 경우 이름에 *.*
점이 포함 된 파일을 모두 일치 .
시킵니다.
그것은 적어도 DOS (그리고 나중에 Windows) 세계에서는 별점 별 입니다. DOS에서 점 .
은 특별한 마법의 의미를 지니고 있습니다. 파일 이름은 8 자로 된 문자 (나중에 확장되었지만 구식으로 유지하자)와 3 자로 된 확장명 (파일 형식을 정의 함)이기 때문입니다. 유닉스에서 파일 유형은 일반적으로 파일의 첫 두 바이트 (또는 다른 마술)에 의해 정의되며 확장자는 유익하지만 많은 의미가 없습니다. 이것이 모두 흐려진 경우를 제외하고.
따라서 유닉스에는 특별한 의미가 없습니다. 별표는 유닉스 쉘에서 "글 로빙"문자이며 임의의 수의 문자 (0 포함)에 대한 와일드 카드입니다. ?
또 다른 일반적인 글러브 캐릭터로, 어떤 캐릭터와도 정확히 일치 합니다.
*.*
하나 이상을 포함하는 모든 파일 이름과 일치합니다 .
. 그것은 특별한 이름이 나 더 이상 의미하지 않는다 *a*
나 *_*
. 그리고 *.?
점과 그 점 다음에 정확히 하나의 문자가있는 모든 파일을 일치시킵니다. 더 복잡한 확장 글 로빙 패턴도 있습니다. 쉘의 매뉴얼 페이지를 참조하십시오.
"스타"가 가장 일반적인 이름인지 "새 해커 사전"(이전 MIT "전문 용어 파일"의 확장) 노트 *
(다음 기호 splat
), 그리고 그 연습에 여전히 사실이다 생각하고, .
"일반적으로 확실히 도트 "로 표시됩니다. 따라서 대기업 심볼로 본질적인 특별한 의미는 없지만 시퀀스는 여전히 유닉스에서 스타 도트 스타 라고 불립니다 . (그다지 유용하지 않습니다.)
여기에는 실제로 별표 *
와 점의 두 가지 기호가 있습니다 .
. 껍질은 일반적으로 별표를 문자로만 해석하지만 정규식에서는 욕심 많은 글로브를 의미합니다. 이 경우 점으로 끝나지 않거나 점으로 시작하지만 하나 이상을 포함하는 항목과 일치합니다.
somefile.dot # match
.dot.between.words. # match
.onlydotatstart # don't match
onlydotatend. # match
.startandenddot. # don't match
onlydotatend.
사건은 반드시 일치합니까?
touch 'onlydotatend.' && echo *.*
반환하지 않습니다
bash
와 둘 다 에 dash
. 어떤 쉘을 사용하고 있습니까?
zsh
구성 에서 시도했지만 작동합니다. onlydotatend.
일치 하는 방법 을 이해하지 못합니다.이를 수행 하는 구성 옵션이 있습니까?
*7.*
확장명 앞의 마지막 문자가 a7
인*sa*
모든 파일을 가져 오십시오sa
. (따라서, 당신이 인용 문서의 제목은 어떻게 한 와일드 카드가 작동 MS-DOS에 ? . (강조는 자신 추가))