Fish Shell:
การอ่านอาร์กิวเมนต์จากคำสั่งลำดับ
วิธีทำ:
สมมติว่า greet.fish
เป็นสคริปต์ของคุณ คุณต้องการให้มันรับชื่อและส่งคืนคำทักทาย
#!/usr/bin/env fish
# อาร์กิวเมนต์ถูกจัดเก็บใน $argv
# $argv[1] เป็นอาร์กิวเมนต์ที่หนึ่ง, $argv[2] เป็นอาร์กิวเมนต์ที่สอง, และอื่น ๆ
set name $argv[1]
echo "Hello, $name!"
ทดสอบการรัน:
$ fish greet.fish World
Hello, World!
ตอนนี้, ด้วยอาร์กิวเมนต์หลายตัว:
#!/usr/bin/env fish
# วนซ้ำผ่านอาร์กิวเมนต์ทั้งหมด
for arg in $argv
echo "Hello, $arg!"
end
ลองทดสอบ:
$ fish greet.fish Earth Mars Venus
Hello, Earth!
Hello, Mars!
Hello, Venus!
การจัดการกับธง (เช่น -u
สำหรับตัวพิมพ์ใหญ่):
#!/usr/bin/env fish
# ตรวจสอบอาร์กิวเมนต์ "-u"
set -l uppercase_mode off
for arg in $argv
if test "$arg" = "-u"
set uppercase_mode on
else if set -q uppercase_mode[1]; and string match --quiet -- "$uppercase_mode" "on"
echo (string upper "$arg")
else
echo $arg
end
end
และการเรียกใช้:
$ fish greet.fish -u mercury venus
MERCURY
VENUS
การศึกษารายละเอียด
Fish Shell มีความสามารถในการอ่านอาร์กิวเมนต์บนบรรทัดคำสั่งมาเป็นเวลานานแล้ว, คล้ายกับ shell อื่นๆ สิ่งที่ทำให้ Fish แตกต่างคือความเรียบง่ายในการออกแบบ ไม่มี $1, $2... $n
ให้ต้องจำ; มันเป็นอาร์เรย์ $argv
, ถือเป็นพื้นที่คุ้นเคยหากคุณเคยมีประสบการณ์กับภาษาโปรแกรมอื่น
มีทางเลือกอื่นๆ เช่น bash, zsh ฯลฯ, แต่ไวยากรณ์สคริปต์ของ Fish มุ่งเน้นไปที่ความสามารถในการอ่านและชัดเจน แตกต่างจากการใช้คำสั่ง shift
แบบดั้งเดิมหรือการจัดการกับ $@
สำหรับอาร์กิวเมนต์ทั้งหมด Fish มี $argv
และโครงสร้างสคริปต์ที่น่ารักเช่นลูป for
และเงื่อนไข if
ที่น้อยเกี่ยวกับสัญลักษณ์ลึกลับแต่มากกว่าในเรื่องของคำที่ชัดเจน
เมื่อดำเนินการ, มันสำคัญที่จะพิจารณาว่าสคริปต์ของคุณจะถูกใช้อย่างไร มันจะต้องการค่าเริ่มต้นหรือไม่? ผู้ใช้จะรู้ว่าต้องป้อนอะไรหรือไม่? ตรวจสอบให้มั่นใจว่าคุณจัดการกับกรณีที่ผู้ใช้ลืมใส่อาร์กิวเมนต์หรือใส่ผิดลำดับ
ดูเพิ่มเติม
- เอกสารการใช้งานอย่างเป็นทางการของ Fish ที่อธิบายเกี่ยวกับอาร์กิวเมนต์บนบรรทัดคำสั่ง: fishshell.com/docs/current/#syntax-command-line
- สำหรับการเขียนสคริปต์ขั้นสูงและสร้างฟังก์ชันของคุณเองใน Fish: fishshell.com/docs/current/#defining-functions
- บทนำสำหรับผู้ใช้ Fish ที่มีพื้นหลังจาก shell อื่น: fishshell.com/docs/current/tutorial.html