Eu tenho escrito / refinado um código relativamente complexo para o ano passado, e aprendendo bash ao longo do caminho. Meu código é preenchido com funções que possuem loops while de vários níveis complexos. Eu recentemente estive aprendendo mais sobre loops for e além da semelhança de c ++ e sem dúvida mais fácil de seguir a sintaxe, estou querendo saber se existem vantagens / desvantagens em usar um versus outro?
Estou pensando principalmente em tempo de execução e compatibilidade com looping de vários níveis. Funções (5 no total) no meu script podem fazer uma iteração entre 10.000 e 800.000 vezes cada, e toda a manobra levando de 12 a 48 horas começa a terminar em uma máquina poderosa, então eu me preocupo com diferenças de tempo muito sutis, se confiáveis. Também estou interessado em quaisquer outras diferenças possíveis entre / por enquanto que não seriam mencionadas em um fórum / site típico devido à sua similaridade geral, mas que poderia afetar um código complexo de qualquer maneira. Por exemplo, se um deles conclui todos os processos (e libera memória) antes do loop e o outro não? Ou interação com programas c ++ chamados dentro de loops.
Aqui estão exemplos simplificados de duas das minhas estruturas de código de função para demonstrar as várias maneiras em que estou usando loops while:
um:
var1="1"; var1max=${length}
while IFG=read -r var1lineFULL; do
var1line='echo ${var1lineFULL} | cut -f 1'
var2="1"; var2max=${length2}
while [ ${var2} -le ${var2max} ]; do
sedvar='sed -n ${var2}p < file.txt'
wait; <c++ executable command>
<more commands (bash/c++), if statements, echoing, verbose options...>
let var2=var2+1
done
let var1=var1+1
done < anotherfile.txt
dois:
var1="1"
var3="1"; var3max='cat thirdfile.txt | wc -l'
while [ ${var3} -le ${var3max} ]; do
while IFS=read -r var3line; do
wait; <fickle c++ executable command>
<bash commands.. if, echo, awk, cut, etc.>
let var3=var3+3
done < thirdfile.txt
let var1=var1+1
done
Espero que isso faça sentido o suficiente para seguir. Nota: esses loops funcionam. Eu tenho eles manipulados para fazer o loop exatamente da maneira que preciso para incrementar inteiros que determinam quantas vezes um loop é executado e separa o nome do arquivo da saída criada. Eles também criam MUITAS linhas de texto, que eu "3 & >" em logs de texto.
Então, o que você acha? Existe alguma razão para mudar para "for" quando não alteraria a colocação do incremento? Existe alguma razão para não? Haveria alguma diferença de horário?