Bash สำหรับลูปที่มีช่วง {# .. #}


17

{# .. #} สร้างลำดับของตัวเลขหรือตัวอักษรคล้ายกับช่วง () ใน Python ถ้าฉันรันคำสั่งecho {1..5}ในบรรทัดคำสั่งฉันมี:

1 2 3 4 5

แต่สคริปต์ทุบตีต่อไปนี้ใช้ไม่ได้ตามที่คาดไว้

for i in {1..3};
do
    echo "Iteration $i"
done

จะพิมพ์:

Iteration {1..3}

ทำไม?
* ฉันสามารถใช้seqแต่ฉันอ่านมันล้าสมัย ( http://www.cyberciti.biz/faq/bash-for-loop/ )


ข้อผิดพลาดนี้เกิดขึ้นหากสคริปต์ถูกดำเนินการโดยคำสั่ง "sh" (ลองใช้ "bash")
Shake0

คำตอบ:


22

ฉันได้ลองใช้รหัสของคุณแล้ว (คัดลอกแปะไว้ในเทอร์มินัล) และมันให้ผลลัพธ์ที่แตกต่างจากที่คุณโพสต์:

for i in {1..3};
do
    echo "Iteration $i"
done
#---OUTPUT BELOW---
Iteration 1
Iteration 2
Iteration 3

ฉันใช้ Linux Mint 12 Lisa (มาจาก Ubuntu) ด้วย bash เวอร์ชั่น4.2.10 (1) - ปล่อยใหม่


2
คุณพูดถูก! ผมคิดว่าการดวลจุดโทษและทุบตีเป็นสิ่งเดียวกัน ..
Shake0

1
ไม่ทุบตีและ sh จะแตกต่างกันมาก ... ทุบตีมีความสามารถมากกว่า sh มันถูกสร้างขึ้นบนไหล่ของ sh :) แม้ว่าพวกเขาทั้งสองจะมีระดับความเข้ากันได้ดี แต่ก็มีความแตกต่างกัน
zipizap

โปรดทราบว่าคุณสามารถทำรายการที่ซ้อนกันเช่นสำหรับ var ใน {{i..j}, {l..m}}; ทำ echo $ var; ทำถ้าคุณต้องการลำดับที่ผิดปกติเช่น 1 2 3 7 8 9
สีน้ำตาล.

โปรดทราบว่าในบาง distros /bin/shIS ชี้ไปที่ทุบตีจริง ๆ แล้วบน Debian และ Ubuntu มันจะชี้ไป/bin/dashที่ POSIX ซึ่งส่วนใหญ่เป็นไปตามมาตรฐาน แต่ไม่สนับสนุนไวยากรณ์เดียวกันทั้งหมดเป็น Bash
dragon788
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.