O problema é esta linha:
for number2 in {1..${loops}}
Esta é uma questão de precedência. Conforme explicado em man bash
:
A ordem de expansões é: expansão de contraventamento; expansão do til, expansão de parâmetros e variáveis, expansão aritmética e comando substituição (feito da esquerda para a direita); divisão de palavras; e expansão do caminho.
Portanto, a expansão de chaves acontece antes da expansão da variável antes . Portanto, quando as chaves são expandidas, $loops
não foi avaliado como 5
. Isso significa que {1..$loops}
(você não precisa do segundo {}
) expande para a string {1..5}
e não a sequência de números de 1 a 5. O mesmo acontece se você usar uma string em vez de uma variável:
$ echo {1..5} ## works: prints a sequence
1 2 3 4 5
$ echo {1..foo} ## fails: prints a string with no expansion
{1..foo}
Como solução alternativa, você pode usar seq
:
for number2 in $(seq 1 "$loops"); do ...
Ou, melhor ainda, o loop certo para o trabalho:
for((number2=0;number2<=$loops; number2++)); do ...
Observação: Como regra geral, você também deve sempre citar suas variáveis.