Ваш фрагмент 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