ZSH에서 파일 확장자를 반복하는 방법은 무엇입니까?

ZSH에서 파일 확장자를 반복하는 방법은 무엇입니까?

이 BASH 구조에 해당하는 ZSH를 찾고 있습니다.

for file in *.{abc,def,ghi}; do #loop through all files with the extensions .abc, .def and .ghi

ZSH에 대한 유사한 구성을 찾을 수 없습니다. 아니면 아닐 수도 있나요?

답변1

다음 파일이 있다고 가정합니다: foo.abc, bar.abc, qux.ghi. bash에서 루프 본문은 foo.abc, bar.abc, *.def(리터럴 사용 *) 및 를 사용하여 4번 실행됩니다 qux.ghi. zsh에서 기본 옵션을 사용하면 루프가 전혀 실행되지 않지만 오류가 발생합니다

zsh:1: no matches found: *.def

확장되지 않은 와일드카드 패턴에서 루프 실행을 방지하고 기존 파일(있는 경우)에서 루프를 실행하려면 다음을 추가하십시오.N글로벌 예선.

for file in *.{abc,def,ghi}(N); do …

당신은 또한 사용할 수 있습니다|운영자, 따라서 여러 스키마 대신 하나의 스키마를 갖게 됩니다. (중괄호는 와일드카드 패턴이 아니며, 와일드카드가 구문 분석되기 전에 발생하는 리터럴 문자열 확장일 뿐입니다. 즉, *.{abc,def,ghi}(N)의 약어입니다 *.abc(N) *.def(N) *.ghi(N).)

for file in *.(abc|def|ghi)(N); do …

여전히 Nglob 한정자가 필요합니다. 그렇지 않으면 일치하는 파일이 없으면 오류가 발생합니다.

Nglob 한정자 없이도 할 수 있습니다.null_glob이 옵션을 켜세요( setopt null_glob). 이는 일반적으로 스크립트에서 의미가 있습니다. Bash에서는 shopt -s nullglob언롤링 모드에서 루프 본문이 실행되는 것을 방지하려면 유사한 옵션( )을 활성화해야 합니다 .

관련 정보