Bash ให้คุณ map สตริงข้อความยาวๆ ให้เป็นตัวแปรเดียว ทำให้ใช้งานและเขียนสคริปต์ง่ายขึ้น พวกมันทำงานอย่างไร และนำไปใช้ได้อย่างไร? มาหาคำตอบกัน
ตัวแปร (Variable) คืออะไร?
ตัวแปรคือชื่อที่จำง่าย ซึ่งสามารถเก็บค่า alphanumeric ที่แตกต่างกันได้ มีประโยชน์เพราะอนุญาตให้ฟังก์ชันเดียวกันนำไปใช้กับค่าต่างๆ ได้ โดยไม่ต้องเขียนสคริปต์/โค้ดซ้ำ ยังทำให้เขียนสคริปต์/โค้ดง่ายขึ้น เพราะแทนที่จะจัดการค่าแต่ละค่า คุณสามารถใช้ชื่อเดียวกันสำหรับค่าทั้งหมดได้
ตัวแปรแบบ Real-time
Bash อนุญาตให้ใช้ตัวแปร สร้างตัวแปรทันทีและนำกลับมาใช้ใน Bash session ปัจจุบันได้ ช่วยการใช้งาน Bash หลายวิธี และจะหายไปเมื่อ session จบลง
ตัวอย่างเช่น สมมติคุณกำลังเยี่ยมชมหลายเว็บไซต์ อาจทำ research หรือ scraping data คุณสามารถสร้างตัวแปรได้ดังนี้:
sitea=https://www.maketecheasier.com
หลังจากนั้น หากต้องการเปิดเว็บไซต์ของเราด้วย Firefox เพียงพิมพ์:
firefox $sitea
ง่ายกว่าและอ่านง่ายกว่ามาก ตัวแปร $sitea จะ map ไปที่เว็บไซต์จนกว่าคุณจะเปลี่ยนค่าเอง หรือจนกว่า Bash session จะจบ และแน่นอนว่าคุณสามารถสร้างตัวแปรเพิ่มได้ เช่น siteb, sitec, sited
ตอนตั้งค่าตัวแปรใหม่ ใช้ชื่ออะไรก็ได้ และเก็บสตริง alphanumeric อะไรก็ได้ แต่จำไว้ว่า case-sensitive โดยค่าเริ่มต้น ดังนั้น $sitea จึงไม่เท่ากับ $SiteA และควรใช้ quotation marks เมื่อเก็บสตริงที่มี special characters (รวมถึง space)
ตัวแปรในสคริปต์ (Variables in Scripts)
ตัวแปรใน Bash มีประโยชน์มากขึ้นตอนเขียนสคริปต์ เพราะอนุญาตให้เขียนสคริปต์เพียงอันเดียว ซึ่งสามารถ iterate ผ่านสตริงต่างๆ หรือกระทำกับข้อมูลที่ปรับแต่งได้ สมมติคุณเขียนสคริปต์ให้ทุกคนใช้บนคอมพิวเตอร์ของตน แต่แต่ละครั้งแสดง greeting ที่เฉพาะบุคคล โดยไม่มีตัวแปร คุณต้องเขียนสคริปต์เวอร์ชันต่างสำหรับแต่ละผู้ใช้ แต่มีตัวแปร คุณเก็บสคริปต์ไว้เหมือนเดิม แค่เปลี่ยนชื่อผู้ใช้
สคริปต์แบบนั้นจะประมาณนี้:
#!/bin/bash username=Odysseas echo $username
ตัวอย่างข้างต้นอาจดูซ้ำซ้อน แต่เมื่อโค้ดซับซ้อนขึ้น ตัวแปรจะกลายเป็น不可或缺 สคริปต์อาจยาวร้อยพันบรรทัด และมีชื่อผู้ใช้หลายจุด เพื่อเข้าใจดีกว่า ให้ดูสคริปต์ที่แตกต่างออกไปนิดหน่อยนี้:
#!/bin/bash username=Linus echo Hello $username. This is a simple script I wrote that will repeat your name - that is, $username - often as an actual example of how to use Bash variables. I hope it will make it easier to understand how to use variables to improve your Bash workflow, $username. In this case, the variable username is mapped to your name. Whenever Bash runs into it, it replaces it with $username.
สคริปต์ข้างต้นจะใช้ชื่อที่定義เป็นตัวแปร username เพื่อเติมข้อความ หากใช้ชื่อจริงของผู้ใช้ คุณต้องพิมพ์ 4 ครั้ง แล้วทำซ้ำสำหรับผู้ใช้ถัดไป อีก 4 ครั้ง ซ้ำไปเรื่อยๆ ด้วยการ assign ให้ตัวแปร คุณเปลี่ยนแค่ครั้งเดียวต่อผู้ใช้ ทุกที่ที่อ้างถึงชื่อผู้ใช้ในข้อความจะอัปเดตอัตโนมัติ
Bash Variables และ Aliases แบบถาวร (Permanent)
เราเห็นวิธีตั้งตัวแปรชั่วคราว และวิธีรวมไว้ในสคริปต์เองสำหรับสิ่งถาวร แต่ถามว่าตั้งตัวแปรถาวรใน Bash โดยตรงได้ไหม? คำตอบคือ "ได้!" และแค่แก้ไขไฟล์เดียวคือ "~/.bashrc"
เปิดไฟล์ "~/.bashrc" ด้วย text editor ที่ชอบ ผมชอบ nano จึงใช้:
nano ~/.bashrc
建議先ทดสอบด้วยตัวแปรเดียว เพื่อรู้ว่าจะดูที่ไหนถ้าไม่สำเร็จ ไปที่ท้ายไฟล์ บรรทัดใหม่ ใส่ตัวแปร ตัวอย่างผมตั้งตัวแปรชื่อ:
myname="Odysseas Kourafalos"
บันทึกไฟล์และออกจาก editor การเปลี่ยนแปลงจะไม่มีผลทันที ใส่คำสั่งนี้ในเทอร์มินัลเพื่อให้มีผล:
source ~/.bashrc
ตอนนี้ใช้ตัวแปรที่ตั้งใหม่ใน Bash session ได้แล้ว:
echo $myname
ตั้งตัวแปรได้เท่าไหร่ก็ได้ และลดความซับซ้อนในการใช้ Bash ทุกวันได้มาก
สำหรับ productivity เพิ่มเติม ควรตั้ง aliases ด้วย ต่างจากตัวแปรทั่วไปที่ map ไปยังข้อมูลสำหรับคำสั่ง aliases ใช้แทนคำสั่งจริง
เหมือนใช้ตัวแปรง่ายๆ เก็บข้อความยาว คุณสามารถใช้ aliases เป็นทางเลือกง่ายๆ แทนคำสั่งซับซ้อน หากต้องการรู้เพิ่มเติม อ่านที่นี่ ซึ่งเราแปลงคำสั่ง 7zip compression ทั้งหมดให้กลายเป็น alias สองตัวอักษร
สุดท้าย แม้คุณจะตั้งตัวแปรถาวรใน .bashrc แล้ว ก็ยัง re-assign ค่าต่างไปได้ชั่วคราว ตัวแปรจะแสดงค่าใหม่จนกว่า Bash session จะจบ (logout หรือ restart) หรือคุณ re-source .bashrc ใหม่