Bash:
การอ่านอาร์กิวเมนต์จากคำสั่งลำดับ
วิธีการ:
#!/bin/bash
# พิมพ์ชื่อของสคริปต์
echo "ชื่อสคริปต์: $0"
# พิมพ์อาร์กิวเมนต์แรก
echo "อาร์กิวเมนต์แรก: $1"
# พิมพ์อาร์กิวเมนต์ทั้งหมด
echo "อาร์กิวเมนต์ทั้งหมด: $@"ตัวอย่างผลลัพธ์สมมุติว่าคุณตั้งชื่อสคริปต์ของคุณว่า ’example.sh’ และคุณเรียกใช้ ./example.sh arg1 arg2:
ชื่อสคริปต์: ./example.sh
อาร์กิวเมนต์แรก: arg1
อาร์กิวเมนต์ทั้งหมด: arg1 arg2วนลูปผ่านอาร์กิวเมนต์:
#!/bin/bash
# วนลูปผ่านอาร์กิวเมนต์แต่ละอัน
for arg in "$@"; do
echo "อาร์กิวเมนต์: $arg"
doneตรวจสอบลึกลงไป
Bash รองรับอาร์กิวเมนต์บรรทัดคำสั่งมานานแล้ว; พวกเขาเป็นพารามิเตอร์ตามตำแหน่ง, $0 ถึง $9, โดย $@ และ $* แสดงอาร์กิวเมนต์ทั้งหมด $0 เป็นสคริปต์นั้นเอง, $1 ถึง $9 คืออาร์กิวเมนต์ลำดับแรกถึงลำดับที่เก้า; ต้องใช้วงเล็บเช่น ${10} เมื่อต้องการเริ่มตั้งแต่ลำดับที่สิบเป็นต้นไป
การใช้ $@ มักจะดีกว่า $* เนื่องจากมันจัดการอาร์กิวเมนต์ที่มีช่องว่างได้อย่างถูกต้อง $@ ให้แต่ละอาร์กิวเมนต์เป็น “คำ” แยกกัน; $* รวมมันทั้งหมดเป็น “คำ” เดียว
คุณสามารถเลื่อนผ่านอาร์กิวเมนต์ได้โดยใช้คำสั่ง shift, ซึ่งจะเปลี่ยน $2 เป็น $1, และต่อไปเรื่อยๆ ทิ้ง $1 เก่า
มีทางเลือกอื่นหรือเปล่า? แน่นอน. getopts และ getopt ให้การควบคุมที่ดีกว่าสำหรับตัวเลือก (เช่น -h สำหรับความช่วยเหลือ) และการแยกสัญญาณการประมวลผล; ตรวจสอบสิ่งเหล่านี้หาก $1, $2,… ไม่ตอบโจทย์
ดูเพิ่มเติม
- คู่มือ Bash เกี่ยวกับพารามิเตอร์พิเศษ: https://www.gnu.org/software/bash/manual/html_node/Special-Parameters.html
- คู่มือการเขียนสคริปต์ Bash ขั้นสูง: https://www.tldp.org/LDP/abs/html/
- บทแนะนำ
getopts: https://wiki.bash-hackers.org/howto/getopts_tutorial