วิธีการใช้ตัวดำเนินการ mod ในทุบตี?


168

ฉันกำลังลองบรรทัดดังนี้:

for i in {1..600}; do wget http://example.com/search/link $i % 5; done;

สิ่งที่ฉันพยายามทำให้ได้ผลลัพธ์คือ:

wget http://example.com/search/link0
wget http://example.com/search/link1
wget http://example.com/search/link2
wget http://example.com/search/link3
wget http://example.com/search/link4
wget http://example.com/search/link0

แต่สิ่งที่ฉันได้รับจริง ๆ ก็คือ:

    wget http://example.com/search/link

คำตอบ:


234

ลองทำสิ่งต่อไปนี้:

 for i in {1..600}; do echo wget http://example.com/search/link$(($i % 5)); done

$(( ))ไวยากรณ์ไม่การประเมินผลทางคณิตศาสตร์ของเนื้อหา


4
ถ้ามีคนต้องการนี้สำหรับการดำเนินการทางคณิตศาสตร์ทราบว่ามอดุโลกับตัวเลขติดลบในbash ผลตอบแทนเท่านั้นที่เหลือ , ไม่โมดูโลคณิตศาสตร์ผล ซึ่งหมายความว่าในขณะที่ทางคณิตศาสตร์-12 mod 10เป็นทุบตีจะคำนวณว่ามันเป็น8 -2คุณสามารถทดสอบได้ง่าย ๆecho $((-12 % 10))( -2) และเปรียบเทียบกับpython3 python3 -c "print(-12 % 10)"( 8)
Lirt

1
อย่าลืมว่าโครงสร้างทางคณิตศาสตร์$(())จะขยายตัวแปรโดยอัตโนมัติดังนั้นคุณจะไม่จำเป็นต้องใช้กับ$ iนี้$((i % 5))จะทำงานได้อย่างสมบูรณ์แบบดี
Yokai


30

คุณต้องใส่นิพจน์ทางคณิตศาสตร์ของคุณใน $ (())

หนึ่งในสายการบิน:

for i in {1..600}; do wget http://example.com/search/link$(($i % 5)); done;

หลายสาย:

for i in {1..600}; do
    wget http://example.com/search/link$(($i % 5))
done

13

นี่อาจเป็นหัวข้อนอกเรื่อง แต่สำหรับ wget in for loop คุณสามารถทำได้อย่างแน่นอน

curl -O http://example.com/search/link[1-600]
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.