Cuplikan for-loop Anda tidak berfungsi seperti yang Anda minta karena dua alasan:
(($i += 5))
- di sini $i
diperluas ke nilai i
. Dengan demikian ekspansi akan menjadi sesuatu seperti ((375 += 5))
, yang tidak masuk akal (mencoba untuk menetapkan angka literal ke angka literal lain). Ini biasanya akan dicapai dengan ((i += 5))
(tidak $
untuk memperluas variabel)
- The
{375..3500}
akan diperluas sebelum iterasi pertama dari loop. Ini akan menjadi daftar angka 375 376 ... 3499 3500
. Untuk setiap iterasi dari loop, i
akan ditugaskan ke masing-masing angka ini, satu-per-satu. Jadi pada awal setiap iterasi, i
akan dipindahkan ke nilai berikutnya dalam daftar itu, menghitung dalam langkah-langkah 1. Secara ((i += 5))
efektif tidak melakukan apa-apa - ia menambahkan 5 ke i, tetapi kemudian saya baru saja ditugaskan lagi pada awal iterasi berikutnya.
Saya pikir saya paling suka for (( ; ; ))
jawabannya, tetapi berikut adalah beberapa alternatif untuk membuat Anda berpikir:
Karena kita berurusan dengan kelipatan 5, dan {a..b..i}
ekspansi tidak didukung di bash versi 3.2.57 (1) (di OS X), maka kita dapat melakukan hal yang agak misterius ini sebagai gantinya:
for i in 375 {38..349}{0,5} 3500; do
echo $i
done
Ini menunjukkan bagaimana bash dapat digunakan untuk membuat produk kartesius.
Saya pikir secara umum for for adalah cara yang paling nyaman untuk melakukan ini, tetapi jika Anda tertarik, Anda dapat menggunakan program while-loop (sedikit lebih dekat dengan BASIC Anda):
count=375
while (( count <= 3500 )); do
echo $count
(( count += 5 ))
done