Ваш фрагмент for-loop не працює так, як вам потрібно з двох причин:
(($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
Це демонструє, як баш можна використовувати для створення декартового продукту.
Я думаю, що в цілому a для циклу - це найзручніший спосіб зробити це, але якщо вам цікаво, ви можете скористатися програмою while-loop (трохи ближче до вашої ОСНОВНОЇ):
count=375
while (( count <= 3500 )); do
echo $count
(( count += 5 ))
done