Cómo usar la sustitución de parámetros en el patrón global (zsh)

8

Quiero procesar un montón de archivos que terminan en algunos sufijos, así que escribí el siguiente script zsh pero no funcionó.

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

¿Por qué no funciona? ¿Cómo puedo mezclar la sustitución de parámetros y el patrón glob?

Yuxiao Zeng
fuente

Respuestas:

10

No funciona porque en zsh, el globing no se realiza de forma predeterminada en la expansión variable. Por eso en zshti puedes hacer:

rm -- $file

Mientras que en otras conchas, necesita:

rm -- "$file"

Si desea globbing, debe solicitarlo explícitamente como en:

rm -- $~file_pattern

En tu caso:

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

(tenga en cuenta que, por convención, tendemos a usar nombres de variables en mayúsculas para las variables de entorno)

Stéphane Chazelas
fuente