Um amigo meu conhecido pelo tratamento desumano de máquinas queria enfatizar sua CPU, e assim escreveu um one-liner como este:
for z in {1..100000000};do num1=$(($z * $z)) && echo $num1;done
Quando executado, este loop apenas fica sem saída e uma rápida olhada top
mostra a festa consumindo grandes quantidades de memória ( gigabytes depois de alguns minutos).
Conforme escrito, eu esperaria que este processo fosse executado sequencialmente - como em z
variável, calcule-o, ecoe o resultado, repita.
Em vez disso, tentar isso com limites superiores menores faz com que pareça que tudo é calculado na frente e, em seguida, despejado na tela em massa . Como em, ele se senta por um momento fazendo os cálculos, então faz o echo
tudo de uma vez.
Por que esse loop se comporta dessa maneira?