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?

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)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.