Estou procurando um ZSH equivalente a esta construção BASH:
for file in *.{abc,def,ghi}; do #loop through all files with the extensions .abc, .def and .ghi
Não consigo encontrar uma construção semelhante para o ZSH. Ou talvez não haja nenhum?
Estou procurando um ZSH equivalente a esta construção BASH:
for file in *.{abc,def,ghi}; do #loop through all files with the extensions .abc, .def and .ghi
Não consigo encontrar uma construção semelhante para o ZSH. Ou talvez não haja nenhum?
Suponha que você tenha os seguintes arquivos:
foo.abc
,bar.abc
,qux.ghi
. No bash, o corpo do loop é executado quatro vezes: comfoo.abc
,bar.abc
,*.def
(com um literal*
) equx.ghi
. Em zsh, com opções padrão, o loop não é executado, em vez disso, você obtém o erroPara evitar executar o loop em um padrão curinga não expandido e executar o loop nos arquivos existentes (se houver), adicione o
N
qualificador glob .Você também pode usar o
|
operador , para ter um único padrão em vez de vários padrões. (As chaves não são um padrão curinga, elas são apenas uma expansão literal de string que acontece antes que os curingas sejam analisados, ou seja,*.{abc,def,ghi}(N)
é apenas uma abreviação de*.abc(N) *.def(N) *.ghi(N)
)Observe que você ainda precisa do
N
qualificador glob, caso contrário, receberá um erro se nenhum arquivo corresponder.Em vez de usar o
N
qualificador glob, você pode ativar anull_glob
opção (setopt null_glob
). Isso geralmente faz sentido em scripts. Observe que no bash, você precisaria ativar a opção semelhante (shopt -s nullglob
) para evitar executar o corpo do loop em padrões não expandidos.