No bash, você pode criar loops usando o comando builtin para iterar por um intervalo:
for i in {5..12}
do
specmd file${i}.awe
done
Existem mais opções para outras situações semelhantes, vou deixar aqui um link para isso.
Eu quero fazer algo como
specmd file5.awe
specmd file6.awe
specmd file7.awe
specmd file8.awe
specmd file9.awe
specmd file10.awe
specmd file11.awe
specmd file12.awe
Existe uma boa maneira de fazer isso? A melhor maneira que posso pensar é algo como
ruby -e "10.upto(15){|i| puts i}" | xargs -I {} specmd file{}.awe
O que obviamente não é uma boa maneira de fazer isso, pois depende do rubi e parece que o rubi não deve ser necessário neste caso.
Nota: existem mais arquivos (por exemplo: file4.awe
, file13.awe
) que eu não quero, então qualquer globbing (provavelmente?) não fará o que eu quero.
No bash, você pode criar loops usando o comando builtin para iterar por um intervalo:
for i in {5..12}
do
specmd file${i}.awe
done
Existem mais opções para outras situações semelhantes, vou deixar aqui um link para isso.
Eu sei que esta é uma pergunta antiga, mas eu não pude resistir.
Não é necessário loop, não é necessário loop while, apenas o bash puro da linha de comandos:
echo file{5..12}.awe | xargs -n1 specmd
for f in file[5-9].awe file1[012].awe
do : stuff with "$f" files
done
... não todas as globs são iguais.
outra coisa que você pode fazer:
x=4
while [ 13 -gt "$((x+=1))" ]
do : stuff with "file$x.awe"
done
... que tem a vantagem de gerar seu iterador enquanto iterativo e funciona por padrão em praticamente qualquer shell com script (como também é verdade para os globs) .
Com zsh
você pode simplificar o comando com um "loop" especial repeat
:
n=5; m=12; repeat $((m-n+1)) specmd file$((n++)).awe
Usando um loop de estilo C em bash
ou ksh93
:
for ((i=5;i<=12;++i)); do specmd "file$i.awe"; done
Usando a expansão de chaves:
for f in file{5..13}.awe; do specmd "$f"; done
Ou, com xargs
, de um modo semelhante ao que você tinha:
printf '%s\n' {5..13} | xargs -I {} specmd file{}.awe
Mais alternativas para zsh
autoload zargs # best in ~/.zshrc
zargs -n1 file{5..12}.awe -- specmd
ou:
for f (file{5..12}.awe) specmd $f
Tags shell