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

(通常、環境変数には大文字の変数名を使用することをお勧めします)

おすすめ記事