特定のサフィックスで終わる複数のファイルを処理したいので、次の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
(通常、環境変数には大文字の変数名を使用することをお勧めします)