좀 조절하려고요마치다. 내가 가지고 있다고 가정 해 봅시다 :
$ ls
bar.baz foo_bar.baz foo.bar
baz로 끝나지 않는 모든 파일과 일치하도록 완성을 원하는 경우:
$ shopt|grep extglob
extglob on
$ compgen -G "*.!(baz)"
foo.bar
글로브 제외는 예상대로 작동합니다. 그러나 foo로 시작하지 않는 모든 파일을 원한다면:
$ compgen -G "!(foo)*"
bar.baz
foo.bar
foo_bar.baz
모든 파일이 여전히 일치합니다. 아마도 이는 *
여전히 일치하도록 확장될 수 있기 때문일 것입니다 foo
. 제외를 사용한 다음 사용하는 전역 트릭이 있습니까 *
?
Janis가 지적했듯이 foo를 제외하려면 가 필요 !(foo*)
하지만 실제 사용 사례에서는 확장명도 일치해야 하므로 glob은 일반적으로 다음 형식이어야 합니다 !(foo*)*.bar
(여전히 "foo" 접두사를 제외할 수는 없음).
답변1
*
부정문에 the를 포함 해야 합니다 . 예를 들면 다음과 같습니다.
ls !(foo*)
편집(설명): 요청된 [확장] 와일드카드 패턴은 입니다 !(foo*)
. 명령과 함께 사용하는 경우 compgen
호출은 다음과 같습니다.
compgen -G "!(foo*)"
compgen
확장되지 않은 명령 에 패턴을 전달하려면 따옴표가 필요합니다 .
편집(질문 변경 후): 편집 질문의 전체 패턴을 보려면 @(!(foo*)|*bar)
또는 중 하나를 시도하십시오 @(!(bar*)|*foo)
. (예상한 내용이 아닌 경우 아래 댓글을 참조하세요.)