อักขระบางตัวไม่เท่ากันใน Bash บางส่วนมีฟังก์ชันพิเศษ ปรับแต่งคำสั่ง และช่วยเราจัดการข้อมูล นั่นเป็นเหตุผลที่เราได้รวบรวมรายการต่อไปนี้ด้วยอักขระพิเศษที่สำคัญที่สุดของ Bash อ่านต่อไปเพื่อเรียนรู้วิธีใช้งานและวิธีทำให้ชีวิต Bash ประจำวันของคุณง่ายขึ้น
ตัวคั่นเส้นทางโฟลเดอร์ (/)
ใน Bash เครื่องหมายทับ (/
)แยกส่วนต่างๆ ของพาธ โฟลเดอร์ย่อยภายในโฟลเดอร์ หากต้องการไปที่โฟลเดอร์ชื่อ "รูปภาพ" ในโฟลเดอร์เริ่มต้น คุณจะต้องใช้คำสั่ง cd
เป็น:
cd /home/USERNAME/pictures
ทุกอย่างหลังจากเครื่องหมายทับในตัวอย่างข้างต้นอยู่ภายในสิ่งที่อยู่ก่อนเครื่องหมายทับ
โฮมไดเร็กทอรี (~)
แทนที่จะพิมพ์ชื่อเต็มของโฟลเดอร์บ้านในเทอร์มินัล Bash คุณสามารถใช้อักขระตัวหนอน (~
). ตัวอย่างเช่น หากต้องการไปที่โฟลเดอร์เริ่มต้น ให้ใช้:
cd ~
คุณยังสามารถรวมไว้ในเส้นทางที่ซับซ้อนมากขึ้นได้ ตัวอย่างเช่น ในการแก้ไขไฟล์ชื่อ “mydata.txt” ภายในโฟลเดอร์ “Personal” ในโฮมไดเร็กทอรีของคุณ ให้ใช้:
nano ~/Personal/mydata.txt
โฟลเดอร์ปัจจุบัน / ด้านบน (.)
คุณสามารถใช้รหัสเดียว (.
) หรือจุดคู่ (..
) เพื่อกำหนดว่าควรทำการดำเนินการภายในไดเร็กทอรีปัจจุบันหรือในไดเร็กทอรีด้านบนตามลำดับ จุดเดียว (.) จับคู่กับโฟลเดอร์ปัจจุบัน ในขณะที่จุดคู่ (..) จับคู่กับโฟลเดอร์ด้านบน
สมมติว่าคุณอยู่ในโฟลเดอร์ “/home/USERNAME/pictures” และต้องการเรียกใช้สคริปต์ชื่อ “transform_images.sh” ภายในไดเรกทอรีเดียวกัน ในกรณีนี้ พิมพ์:
sh ./transform_images.sh
หากหลังจากรันสคริปต์แล้ว คุณต้องการกลับไปที่โฟลเดอร์ที่อยู่เหนือโฟลเดอร์ปัจจุบัน ให้พิมพ์:
cd ..
ที่จะคืนคุณจากโฟลเดอร์ “/home/USERNAME/pictures” เป็น “/home/USERNAME”
แสดงความคิดเห็นและยกเลิก (#)
สัญลักษณ์แฮช (#
) มีประโยชน์มากกว่าเมื่อเขียนสคริปต์ทุบตีเนื่องจากช่วยให้คุณสามารถเพิ่มความคิดเห็นเพื่อใช้อ้างอิงในอนาคตได้ Bash ละเว้นทุกอย่างที่ตามหลังสัญลักษณ์แฮช
ในสคริปต์ต่อไปนี้ บรรทัดแรกกำหนดว่าเป็นสคริปต์ทุบตี บรรทัดที่สองคือความคิดเห็นที่ถูกละเว้น และบรรทัดที่สามคือคำสั่งคัดลอกทั่วไป:
#!/bin/bash # This is a comment - you can type anything you want here cp file1.txt /home/USERNAME/scripts/file2.txt
แฮชมีประโยชน์แม้ว่าคุณจะไม่ได้เขียนสคริปต์ก็ตาม เนื่องจากอนุญาตให้คุณยกเลิกบางส่วนของคำสั่งได้ หากต้องการดูการใช้งานจริง ให้ลองใช้คำสั่งตรงไปตรงมาต่อไปนี้:
echo I am YOUR_NAME
จากนั้น ให้ลองทำสิ่งต่อไปนี้แทน:
echo I am #YOUR_NAME
คุณจะเห็นเฉพาะ "I am" ที่ส่งคืนในเวอร์ชันที่ 2 เนื่องจากแฮชจะยกเลิกทุกอย่างที่ตามมาหลังจากนั้น
ช่วง ([])
คุณสามารถกำหนดช่วงอักขระโดยใส่ในวงเล็บ ([]
). หากต้องการดูการทำงานจริง สมมติว่าคุณต้องการค้นหาชื่อโฟลเดอร์ที่ขึ้นต้นด้วย D หรือ M พิมพ์:
ls [DM]*
บางทีคุณอาจอยู่ในโฟลเดอร์ที่เต็มไปด้วยโฟลเดอร์ย่อยที่ตั้งชื่อตามแต่ละปีแทน การคัดลอกโฟลเดอร์สำหรับห้าปีที่ผ่านมาไปยัง /home/USERNAME/backup
, ใช้:
cp -r 201[56789] /home/USERNAME/backup
คุณยังสามารถลดความซับซ้อนได้ด้วยเครื่องหมายขีดกลาง (-):
cp 201[5-9] /home/USERNAME/backup
Bash จะวนซ้ำจาก 5 ถึง 9 เพื่อรวมตัวเลขระหว่างกัน
การเปลี่ยนเส้นทาง (<>)
การใช้วงเล็บเหลี่ยม (<>
) คุณสามารถเปลี่ยนเส้นทางอินพุตหรือเอาต์พุตของคำสั่งได้ ตัวอย่างเช่น คำสั่งต่อไปนี้:
ls >> list.txt
จะเปลี่ยนเส้นทางผลลัพธ์ของ ls
และบันทึกลงในไฟล์ “list.txt”
โปรดทราบว่าวงเล็บมุมฉากคู่ (>>
) ต่อท้าย เอาต์พุตของคำสั่งไปยังไฟล์ หากคุณเรียกใช้คำสั่งเดิมอีกครั้ง คำสั่งนี้จะผนวกเอาท์พุตต่อท้ายเนื้อหาที่มีอยู่ เพื่อแทนที่ เนื้อหาที่มีผลลัพธ์ใหม่ ใช้วงเล็บมุมฉากเดียว (>
):
ls > list.txt
ท่อ (|)
คุณสามารถรวมคำสั่งต่างๆ เข้าด้วยกันเป็นคำสั่งที่ใหญ่ขึ้นเพื่อให้ได้ผลลัพธ์ที่ซับซ้อนยิ่งขึ้นโดยใช้ไพพ์ (|
). ค่อนข้างคล้ายกับการเปลี่ยนเส้นทาง (เพิ่มเติมเกี่ยวกับความเหมือนและความแตกต่างที่นี่)
สมมติว่าคุณมีไฟล์ขนาดใหญ่ที่มีรายการนับพันรายการและต้องการค้นหาชื่อของคุณในไฟล์นั้น แทนที่จะค้นหาในโปรแกรมแก้ไขข้อความ ให้ทำดังต่อไปนี้:
cat entries.txt | grep 'YourName'
ในกรณีนี้ เอาต์พุตของ “entries.txt” จะถูกไพพ์ไปยัง grep
คำสั่ง
ตัวคั่นคำสั่ง (;)
Bash อนุญาตให้คุณออกคำสั่งหลายคำสั่งในคราวเดียวโดยคั่นด้วยเครื่องหมายอัฒภาค (;
). ตัวอย่างเช่น การคัดลอกสองโฟลเดอร์ไปยังสองปลายทางที่แตกต่างกันด้วยคำสั่งเดียว:
cp folder1 destination1; cp folder2 destination2
อัฒภาคแยกสองคำสั่งและบอกให้ Bash ดำเนินการตามลำดับ โปรดทราบว่าคุณสามารถใช้มากกว่าสองคำสั่งได้หากต้องการ
สัญลักษณ์แทน (*)
คุณอาจเคยใช้เครื่องหมายดอกจัน (*
) ในบางคำสั่ง โดยจะจับคู่ลำดับของอักขระใดๆ และอนุญาตให้ดำเนินการต่างๆ เช่น คัดลอกไฟล์ JPG ทั้งหมดจากโฟลเดอร์หนึ่งไปยังอีกโฟลเดอร์หนึ่ง:
cp /home/USERNAME/folder1/*.jpg /home/USERNAME/folder2/
เครื่องหมายคำถาม (?
) เป็นไวด์การ์ดใน Bash แต่จับคู่กับอักขระเดียวเท่านั้น ตัวอย่างเช่น:
cp /home/USERNAME/201?/*.jpg /home/USERNAME/folder2/
คำสั่งดังกล่าวจะคัดลอกไฟล์ jpg ทั้งหมดในโฟลเดอร์ที่ขึ้นต้นด้วย “201” เนื่องจากไวด์การ์ดแปลเป็นอักขระที่เป็นตัวอักษรและตัวเลขคละกัน ไม่ใช่แค่ตัวเลขเท่านั้น คำสั่งดังกล่าวจะคัดลอกโฟลเดอร์ใดๆ ที่อาจมีชื่อว่า “201A” หรือ “201z” ด้วย
เปิดในเบื้องหลัง (&)
คุณสามารถรันคำสั่งเป็นกระบวนการพื้นหลังได้เพียงแค่ต่อท้ายคำสั่งด้วยสัญลักษณ์แอมเพอร์แซนด์ (&
):
cp /home/USERNAME/Downloads/huge_file.zip /home/USERNAME/backups &
ด้านบนนี้จะเริ่มคัดลอกไฟล์ huge_file.zip และย้ายไปที่พื้นหลังทันที ช่วยให้คุณใช้งานเทอร์มินัลต่อไปได้ คำสั่งจะออกโดยอัตโนมัติเมื่อเสร็จสิ้น หากคุณต้องการนำมันไปข้างหน้าอีกครั้ง คุณสามารถทำได้โดยพิมพ์ fg
ตามด้วย Enter
ตัวแปร ($)
เครื่องหมายดอลลาร์ ($
) ให้คุณตั้งค่าตัวแปรเพื่อใช้ในคำสั่งของคุณได้ หากต้องการดูการใช้งานจริง ให้ลองป้อนข้อมูลต่อไปนี้ในเทอร์มินัลของคุณ:
myname=YOUR_NAME myage=YOUR_AGE echo "I'm $myname and I'm $myage years old"
โปรดทราบว่าไม่มีเครื่องหมายดอลลาร์เมื่อกำหนดค่าให้กับตัวแปร
Escapes (\) และ Quotes (”)
หากคุณต้องการใช้อักขระพิเศษใดๆ ก็ตามที่อยู่ในคำสั่ง คุณจะต้องหลีกเลี่ยงมัน คุณสามารถทำได้โดยนำหน้าอักขระพิเศษด้วยแบ็กสแลช (\
). ตัวอย่างเช่น หากคุณมีไฟล์ที่มีชื่อซึ่งมีเครื่องหมายอัศเจรีย์ คุณจะต้องพิมพ์ \!
แทนเพื่อให้ Bash ตีความว่าเป็นเครื่องหมายอัศเจรีย์และไม่ใช่เป็นอักขระพิเศษ
อีกวิธีหนึ่งก็คือการใช้ตัวใดตัวหนึ่ง (''
) หรือเครื่องหมายคำพูดคู่ (""
). โดยการใส่สตริงในเครื่องหมายคำพูด อักขระพิเศษใดๆ ในนั้นจะถือเป็นอักขระจริง เครื่องหมายคำพูดเดี่ยวและคู่ก็มีความแตกต่างเช่นกัน อัญประกาศเดี่ยวจะประเมินสตริงที่ล้อมรอบเป็นข้อความ ในขณะที่อัญประกาศคู่อนุญาตให้คุณใช้ตัวแปร ($) ภายในสตริงที่ล้อมรอบได้
บทสรุป
ด้านบนไม่ใช่อักขระพิเศษเพียงตัวเดียวใน Bash แต่เป็นอักขระที่เราพิจารณาว่ามีประโยชน์มากที่สุดสำหรับการผจญภัยประจำวันของเราในเทอร์มินัล อย่าลืมตรวจสอบแป้นพิมพ์ลัดเหล่านี้เพื่อย้ายไปมาใน Bash อย่างรวดเร็ว โปรดแจ้งให้เราทราบในส่วนความคิดเห็นด้านล่างหากเราพลาดอักขระพิเศษที่สำคัญใด ๆ