การอ่านอาร์กิวเมนต์จากคำสั่งลำดับ

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