Como usar a substituição de parâmetros no padrão glob (zsh)

7

Eu quero processar um monte de arquivos que terminam com alguns sufixos, então eu escrevi o seguinte script zsh mas não funcionou.

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 que isso não funciona? Como posso misturar a substituição de parâmetros e o padrão glob?

    
por Yuxiao Zeng 25.06.2013 / 11:32

1 resposta

9

Não funciona porque, em zsh , globbing não é feito por padrão na expansão da variável. Por que, em zsh , você pode fazer:

rm -- $file

Enquanto em outros shells, você precisa:

rm -- "$file"

Se você quer globbing, você precisa perguntar explicitamente como em:

rm -- $~file

No seu caso:

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

(observe que, por convenção, tendemos a usar nomes de variáveis maiúsculas para variáveis de ambiente)

    
por 25.06.2013 / 11:42

Tags