ตัวอย่างข้อมูลแบบลูปของคุณไม่ทำงานตามที่คุณต้องการด้วยเหตุผลสองประการ:
(($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