Как использовать подстановку параметров в шаблоне glob (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"

Если вы хотите использовать globbing, вам нужно явно указать это, как в:

rm -- $~file_pattern

В твоем случае:

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

(обратите внимание, что по соглашению мы склонны использовать имена переменных в верхнем регистре для переменных среды)

Стефан Шазелас
источник