왜?'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*