특정 접미사로 끝나는 여러 파일을 처리하고 싶어서 다음과 같은 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
(관례적으로 환경 변수에는 대문자 변수 이름을 사용하는 것을 선호합니다)