문서에 따르면,~
다음과 같이 사용할 수 있습니다.글로벌 운영자EXTENDED_GLOB
설정 되면 다음과 같은 생성자를 허용합니다.
print -rl glob*~globA*~glob*B
따라서 일치 하지만 합계 glob*
와 일치하지 않는 모든 것 . 좋아요:globA*
glob*B
touch file{1,2,3,4{,5}}
setopt extendedglob
지금
print -rl file*~f*3~file4*
동작은 예상대로입니다.
file1
file2
하지만 빈 패턴을 사용하면
print -rl file*~f*3~~file4*
인쇄
file1
file2
file3
첫 번째 glob의 결과를 필터링하는 데 마지막 패턴만 사용되는 것처럼 보입니다(비어 있는 두 번째와 세 번째는 무시됩니다).
print -rl file*~f*3~file4*~~
생산하다
file1
file2
file4
file45
이제 두 번째 것만 사용됩니다...
이상한 점은 첫 번째 물결표 뒤의 패턴이 비어 있으면 전혀 작동하지 않는다는 것입니다.
print -rl file*~~f*3~file4*
오류
zsh: no matches found: file*~~f*3~file4*
내가 여기서 무엇을 놓치고 있는 걸까요?
zsh 5.3.1
중요하다면...
답변1
~~
빈 패턴을 사용하지 마십시오. 대신 다음 두 가지 중 하나를 수행합니다.
- 전체 패턴의 끝 부분에서 문자 그대로 " "와 일치합니다
~~
. - 중간에서 단일 " " 문자를 일치시킨
~
다음 제외된 다음 패턴으로 이동합니다(즉, 리터럴~
뒤에~
연산자가 옵니다).
몇 가지 추가 항목으로 파일 세트를 확장하면 다음과 같은 일이 발생하는 것을 볼 수 있습니다.
touch file3~ file3~~ file4~ file4~~
이제 첫 번째 이상한 명령을 실행하십시오.
print -rl file*~f*3~~file4*
file1
file2
file3
file3~~
file3~
세 가지 모두 file4*
와 마찬가지로 제외되었습니다. file3~~
일치하지 않기 때문에 여전히 존재합니다 f*3~
.
두번째:
print -rl file*~f*3~file4*~~
file1
file2
file3~
file3~~
file4
file45
file4~
유일한 일치 항목이므로 Only가 file4~~
제외되었습니다 file4*~~
.
이제 마지막 사례에는 다음과 같은 출력이 있습니다.
print -rl file*~~f*3~file4*
file3~
file3~~
이는 일치하지만 일치하지 않는 두 파일이기 때문입니다 file*~
.f*3
file4*
적어도 리터럴 이후 연산자의 경우에는 구문 분석 버그일 수 있지만 null 제외 패턴의 사용을 볼 수 없으므로 다른 작업을 수행해야 하는지 잘 모르겠습니다.