วิธี เชื่อมต่ออาร์กิวเมนต์ กับบรรทัดคำสั่งใน 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 ของคุณมีความไดนามิกและฟังก์ชันการทำงานมากขึ้น!