glob 모드(zsh)에서 매개변수 대체를 사용하는 방법

glob 모드(zsh)에서 매개변수 대체를 사용하는 방법

특정 접미사로 끝나는 여러 파일을 처리하고 싶어서 다음과 같은 zsh 스크립트를 작성했는데 작동하지 않습니다.

EXT=(.jpg .png .gif)
EXT=${(j.|.)EXT}    # EXT becomes '.jpg|.png|.gif'
for f in *($EXT); do     # should become '*(.jpg|.png|.gif)' but failed
    process-one-file $f
done

왜 작동하지 않나요? 매개변수 대체와 전역 모드를 혼합하는 방법은 무엇입니까?

답변1

zsh에서는 기본적으로 변수 확장 시 글로빙이 수행되지 않기 때문에 작동하지 않습니다 . 그렇기 때문에 zsh다음과 같이 할 수 있습니다.

rm -- $file

다른 쉘에는 다음이 필요합니다.

rm -- "$file"

정말로 와일드카드를 원한다면 다음과 같이 명시적으로 요청해야 합니다.

rm -- $~file_pattern

귀하의 경우:

for f (*($~EXT)) process-one-file $f

(관례적으로 환경 변수에는 대문자 변수 이름을 사용하는 것을 선호합니다)

관련 정보