วิธี เชื่อมต่ออาร์กิวเมนต์
กับบรรทัดคำสั่งใน Ruby โดยใช้ Backquotes
เมื่อทำงานกับสคริปต์ Ruby ที่จำเป็นต้องเรียกใช้คำสั่งระบบปฏิบัติการ คุณอาจพบว่าคุณต้องการเชื่อมต่ออาร์กิวเมนต์บางอย่างแบบไดนามิก โดยเฉพาะอย่างยิ่ง คุณอาจสงสัยว่าคุณสามารถใช้ Backquotes (หรือที่เรียกว่า Backticks) เพื่อทำเช่นนี้ได้หรือไม่ ในบล็อกโพสต์นี้ เราจะสำรวจคำถามนี้และค้นพบวิธีที่ถูกต้องในการเรียกใช้คำสั่งเหล่านี้อย่างมีประสิทธิภาพ
ทำความเข้าใจกับปัญหา
ลองจินตนาการว่าคุณมีสคริปต์ Ruby ที่คุณต้องการแสดงรายการเนื้อหาของไดเรกทอรี คุณต้องการทำเช่นนี้โดยการเชื่อมต่อค่าตัวแปร Ruby ที่เก็บเส้นทางไปยังไดเรกทอรีนั้นเข้ากับคำสั่งที่คุณกำลังเรียกใช้ คำถามที่เราต้องพิจารณาคือว่า Backquotes สามารถใช้เพื่อวัตถุประสงค์นี้ได้หรือไม่
วิธีแบบดั้งเดิม
นักพัฒนา Ruby ส่วนใหญ่คุ้นเคยกับการใช้เมธอด system
เพื่อเรียกใช้คำสั่ง นี่คือวิธีที่ทำกันโดยทั่วไป:
#!/usr/bin/env ruby
directory = '/home/paulgreg/'
system 'ls ' + directory
ในตัวอย่างนี้:
- เมธอด
system
จะเรียกใช้คำสั่งls
และรวมตัวแปร directory เข้าไป - คำสั่งจะแสดงรายการเนื้อหาของ
/home/paulgreg/
แต่ใช้ Backquotes ล่ะ?
การสำรวจ Backquotes
Backquotes ใน Ruby ใช้สำหรับเรียกใช้คำสั่งและคืนค่าผลลัพธ์ อย่างไรก็ตาม การใช้ Backquotes ต้องใช้ไวยากรณ์ที่แตกต่างออกไป โดยเฉพาะเมื่อคุณต้องการรวมค่าตัวแปรเข้าไปด้วย
คุณสามารถเชื่อมต่อด้วย Backquotes ได้หรือไม่?
คำตอบคือ ไม่; การใช้ Backquotes ตามวิธีที่แสดงข้างต้นจะไม่ทำงานตามที่ตั้งใจ หากคุณใช้ Backquotes ดังนี้:
`ls #{directory}`
โค้ดนี้จะทำงานได้อย่างถูกต้อง แต่ต้องการรูปแบบที่แตกต่างสำหรับการแทรกสตริงด้วยตัวแปร directory
วิธีที่ถูกต้อง
เพื่อเพิ่มอาร์กิวเมนต์แบบไดนามิกให้กับคำสั่งโดยใช้ Backquotes คุณควรใช้ความสามารถในการแทรกสตริงของ Ruby นี่คือวิธีที่คุณสามารถทำได้:
#!/usr/bin/env ruby
directory = '/home/paulgreg/'
`ls #{directory}`
ในตัวอย่างนี้:
- ไวยากรณ์ Backtick (
...
) ถูกใช้เพื่อเรียกใช้คำสั่ง #{directory}
ใน Backquotes บอก Ruby ให้แทรกค่าของตัวแปรdirectory
โดยตรงเข้าไปในคำสั่ง
ข้อคิดสำคัญ
- Backquotes จะเรียกใช้คำสั่งและจับผลลัพธ์
- การแทรกสตริง (
#{var}
) เป็นสิ่งสำคัญสำหรับการเพิ่มเนื้อหาแบบไดนามิก - เมธอด
system
ยังคงอนุญาตให้ทำการเชื่อมต่อแบบดั้งเดิม แต่ขาดความสะดวกสบายในการจับผลลัพธ์ของคำสั่ง
บทสรุป
การใช้ Backquotes ใน Ruby สำหรับการเรียกใช้คำสั่งระบบนั้นมีพลัง โดยเฉพาะเมื่อรวมกับการแทรกสตริง วิธีนี้ช่วยให้สามารถเขียนโค้ดที่ชัดเจนและย่อให้สั้นลง และทำให้สามารถจัดการกับอาร์กิวเมนต์แบบไดนามิกได้ จำไว้ว่าคุณควรใช้ #{}
เพื่อแทรกค่าตัวแปรอย่างถูกต้องในคำสั่งของคุณ
หากคุณเพิ่งเริ่มต้นในการเรียกใช้คำสั่ง OS ใน Ruby การทดลองใช้ทั้ง system
และ Backquotes จะช่วยเพิ่มพูนความเข้าใจและประสิทธิภาพในงานเขียนสคริปต์ของคุณ
ตอนนี้ที่คุณรู้วิธีการเชื่อมต่ออาร์กิวเมนต์โดยใช้ Backquotes คุณสามารถทำให้สคริปต์ Ruby ของคุณมีความไดนามิกและฟังก์ชันการทำงานมากขึ้น!