Ваш фрагмент цикла for не работает, как вам требуется по двум причинам:
(($i += 5))
- здесь $i
расширяется до значения i
. Таким образом, расширение будет чем-то вроде этого ((375 += 5))
, что не имеет смысла (попытка присвоить литеральное число другому литеральному номеру). Обычно это достигается с помощью ((i += 5))
(нет, $
чтобы расширить переменную)
{375..3500}
Будет расширен до первой итерации цикла. Это будет список номеров 375 376 ... 3499 3500
. Для каждой итерации цикла, i
будут присваиваться каждому из этих номеров, один за другим. Таким образом, в начале каждой итерации i
будет переназначаться следующее значение в этом списке, считая с шагом 1. ((i += 5))
Фактически ничего не делает - он добавляет 5 к i, но затем я просто переназначается снова в начале Следующая итерация.
Я думаю, что мне больше нравится for (( ; ; ))
ответ, но вот несколько вариантов, чтобы вы думали:
Поскольку мы имеем дело с коэффициентами, кратными 5, и {a..b..i}
расширение не поддерживается в bash версии 3.2.57 (1) (в OS X), то вместо этого мы можем сделать это немного загадочно:
for i in 375 {38..349}{0,5} 3500; do
echo $i
done
Это демонстрирует, как bash может быть использован для создания декартового произведения.
В общем, я думаю, что цикл for является наиболее удобным способом сделать это, но если вам интересно, вы можете использовать цикл while (немного ближе к вашему БЕЙСИКУ):
count=375
while (( count <= 3500 )); do
echo $count
(( count += 5 ))
done