ตัวอย่างข้อมูลแบบลูปของคุณไม่ทำงานตามที่คุณต้องการด้วยเหตุผลสองประการ:
(($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 for loop เป็นวิธีที่สะดวกที่สุดในการทำสิ่งนี้ แต่ถ้าคุณสนใจคุณสามารถใช้ while-loop (ใกล้กับ BASIC ของคุณมากขึ้น):
count=375
while (( count <= 3500 )); do
echo $count
(( count += 5 ))
done