Su fragmento de bucle for no funcionó como lo requiere por dos razones:
(($i += 5))
- aquí $i
se expande al valor de i
. Por lo tanto, la expansión será algo así ((375 += 5))
, lo que no tiene sentido (intentar asignar un número literal a otro número literal). Esto normalmente se lograría con ((i += 5))
(no $
para expandir la variable)
- El
{375..3500}
se expandirá antes de la primera iteración del bucle. Será la lista de números 375 376 ... 3499 3500
. Para cada iteración del ciclo, i
se asignará a cada uno de estos números, uno por uno. Por lo tanto, al comienzo de cada iteración, i
se reasignará al siguiente valor en esa lista, contando en los pasos de 1. ((i += 5))
Efectivamente no hace nada: agrega 5 a i, pero luego me reasignan nuevamente al comienzo del siguiente iteración
Creo que me gusta más la for (( ; ; ))
respuesta, pero aquí hay algunas alternativas para que pienses:
Dado que estamos lidiando con múltiplos de 5, y la {a..b..i}
expansión no es compatible con la versión 3.2.57 (1) de bash (en OS X), entonces podemos hacer esto algo arcano en su lugar:
for i in 375 {38..349}{0,5} 3500; do
echo $i
done
Esto demuestra cómo se puede usar bash para crear un producto cartesiano.
Creo que, en general, un bucle for es la forma más conveniente de hacer esto, pero si está interesado, puede usar un programa while-loop (un poco más cercano a su BASIC):
count=375
while (( count <= 3500 )); do
echo $count
(( count += 5 ))
done