Seu snippet for-loop não funcionou conforme o necessário por dois motivos:
-
(($i += 5))
- aqui o $i
é expandido para o valor de i
. Assim, a expansão será algo como ((375 += 5))
, o que não faz sentido (tentar atribuir um número literal a outro número literal). Isso normalmente seria obtido com ((i += 5))
(sem $
para expandir a variável)
- O
{375..3500}
será expandido antes da primeira iteração do loop. Será a lista de números 375 376 ... 3499 3500
. Para cada iteração do loop, i
será atribuído a cada um desses números, um por um. Assim, no início de cada iteração, i
será reatribuído ao próximo valor nessa lista, contando-se em etapas de 1. O ((i += 5))
efetivamente não faz nada - ele adiciona 5 a i, mas, em seguida, eu apenas reatribuo novamente no início da próxima iteração.
Acho que gostei mais da resposta for (( ; ; ))
, mas aqui estão algumas alternativas para você pensar:
Como estamos lidando com múltiplos de 5, e a expansão {a..b..i}
não é suportada na versão bash 3.2.57 (1) (no OS X), então podemos fazer essa coisa um pouco misteriosa:
for i in 375 {38..349}{0,5} 3500; do
echo $i
done
Isso demonstra como o bash pode ser usado para criar um produto cartesiano.
Eu acho que em geral um loop for é a maneira mais conveniente de fazer isso, mas se você estiver interessado, você pode usar um programa while-loop (um pouco mais próximo do seu BASIC):
count=375
while (( count <= 3500 )); do
echo $count
(( count += 5 ))
done