グロブパターン(zsh)でパラメーター置換を使用する方法


8

一部のサフィックスで終わる一連のファイルを処理したいので、次の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

なぜ動作しないのですか?パラメータ置換とグロブパターンを混在させるにはどうすればよいですか?

回答:


10

zshでは、変数展開時にデフォルトでグロビングが行われないため、機能しません。それzshができる理由:

rm -- $file

他のシェルでは、次のものが必要です。

rm -- "$file"

グロビングが必要な場合は、次のように明示的に要求する必要があります。

rm -- $~file_pattern

あなたの場合:

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

(慣例により、環境変数には大文字の変数名を使用する傾向があることに注意してください)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.