Bash의 *와 ?* 글로브의 차이점

Bash의 *와 ?* 글로브의 차이점
  • *대략 길이가 무한한 와일드카드입니다.
  • ?길이가 대략 1 또는 0인 와일드카드입니다.

에서 문자열을 검색할 때 vs를 사용하는 것 *사이에 차이점이 있습니까 ??*bash

답변1

차이점은 in bash(질문에 태그를 지정했을 때) *은 길이가 0자 이상인 모든 문자열과 일치하는 반면, ?*in은 길이가 1자 이상인 문자열과 일치한다는 것입니다. 예를 들어, 두 개의 파일을 고려하십시오: file.txt및 를 사용하여 나열 xfile.txt해 보십시오 .ls ?*file.txtls *file.txt

이 구성을 사용하는 실제 사례는 숨겨진 파일을 나열하는 것입니다. 그냥 이렇게 할 때가 많아요

ls .??*

이중 물음표는 더 간단한 형식처럼 현재 디렉토리 .와 상위 디렉토리가 나열되는 것을 방지하기 위해 여기에서 사용됩니다 ...ls .*


.??*예를 들어, 두 문자만 있는 파일 이름(예: ) 은 .f이 패턴과 일치하지 않습니다. 더 신뢰할 수 있는 솔루션은 이지만 ls {..?,.[!.]}*일반적으로 이것은 나에게 너무 많은 타이핑입니다.

답변2

이 정의는 어디서 얻었으며 어떤 표현을 언급하고 있나요?

쉘 표현식에 대해 이야기하면 두 문자를 모두 단독으로 사용할 수 있지만 for의 정의는 ?항상 1이나 0이 아닌 하나의 문자와 일치하기 때문에 일치하지 않습니다.

정규식에 대해 이야기하면 둘 다 표현식 뒤에 배치되는 연산자입니다. 따라서 "?*"는 반드시 다른 내용 뒤에 위치해야 합니다.

관련 정보