%20%EC%99%80%EC%9D%BC%EB%93%9C%EC%B9%B4%EB%93%9C%EA%B0%80%20%EC%A0%9C%EC%99%B8%ED%95%98%EB%A0%A4%EB%8A%94%20%ED%8C%8C%EC%9D%BC%20%EC%9D%B4%EB%A6%84%EA%B3%BC%20%EC%9D%BC%EC%B9%98%ED%95%98%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
왜?'myscript.txt'명령을 실행하면 다음과 같이 표시됩니다.
$ ls !(my)*.txt
myscript.txt
hey.txt
$ ls !(my)*.txt
마찬가지로 bash는 and 를 어떻게 해석합니까 $ ls !(my*).txt
?
답변1
!(my)*.txt
myscript.txt
때문에 일치
!(my)
빈 문자열 일치*
성냥myscript
.txt
성냥.txt
( !(my)
빈 문자열과 일치 myscript
하거나...과 일치합니다.)*
!(my)
m
*
yscript
!(my*).txt
.txt
로 끝나지만 로 시작하지 않는 파일 이름을 일치시키려면 이 작업을 수행해야 합니다 my
.
이는 !(*)
ksh 관련 연산자입니다. 옵션이 켜져 있는 bash
경우에만 해당 옵션이 켜져 있는 경우에만 해당 옵션도 지원됩니다.extglob
zsh
kshglob
zsh
또한 자체 extendedglob
s와 ^
부정 연산자 가 있습니다.~
와는 별개로/설마운영자:
set -o extendedglob
ls -ld -- (^my*).txt
ls -ld -- *.txt~my*
이것와는 별개로/설마연산자는 ksh93
다음과 같은 방법으로 구현할 수 있습니다.
ls -ld -- @(*.txt&!(my*))
또는 bash -O extglob
이전 버전의 ksh와 함께 사용
ls -ld -- !(!(*.txt)|my*)
그러나 전체 glob 패턴에 대한 최종 필터로 사용되는 의 연산자 zsh
와 는 다르지만 glob의 개별 경로 구성 요소에서만 작동할 수 있습니다(예: 확장에서 제외 ) .~
!(...)
@(...)
*/b*~f*r
foo/bar
*/b*