ตัวอักษรไม่ได้เท่าเทียมกันใน Bash บางตัวทำฟังก์ชันพิเศษ ปรับคำสั่ง และช่วยจัดการข้อมูล นั่นคือเหตุผลที่เรารวบรวมรายการ Bash special characters สำคัญที่สุด อ่านต่อเพื่อรู้จักการใช้งานและวิธีที่ทำให้ชีวิต Bash ทุกวันง่ายขึ้น
Folder Path Separator (/)
ใน Bash forward-slash (/) แยกส่วนของ path คือ subfolders ภายใน folders เพื่อไปโฟลเดอร์ "pictures" ภายใน home folder ใช้คำสั่ง cd:
cd /home/USERNAME/pictures
ทุกอย่างหลัง forward slash ในตัวอย่างอยู่ภายในสิ่งที่อยู่ก่อน slash
Home Directory (~)
แทนที่จะพิมพ์ชื่อ home folder เต็มๆ ใน Bash terminal ใช้ tilde character (~) ตัวอย่าง ไป home folder:
cd ~
นำไปใช้ใน path ซับซ้อนได้ เช่น แก้ไขไฟล์ "mydata.txt" ในโฟลเดอร์ "Personal" ใน Home directory:
nano ~/Personal/mydata.txt
Current / Above Folder (.)
ใช้ single dot (.) หรือ double dot (..) กำหนดว่า action ควรทำใน current directory หรือ directory ข้างบน ตามลำดับ Single dot (.) map ไป current folder double dot (..) map ไป folder ข้างบน
สมมติคุณอยู่ใน "/home/USERNAME/pictures" ต้องการรันสคริปต์ "transform_images.sh" ในไดเรกทอรีเดียวกัน พิมพ์:
sh ./transform_images.sh
หลังรันสคริปต์เสร็จ ต้องการกลับไปโฟลเดอร์ข้างบน พิมพ์:
cd ..
จะกลับจาก "/home/USERNAME/pictures" ไป "/home/USERNAME"
Comments และ Cancels (#)
Hash symbol (#) มีประโยชน์ตอนเขียน Bash scripts เพราะเพิ่ม comments ได้สำหรับอ้างอิงอนาคต Bash ข้ามทุกอย่างหลัง hash symbol
ในสคริปต์นี้ บรรทัดแรกระบุว่าเป็น Bash script บรรทัดที่ 2 เป็น comment ถูกข้าม บรรทัดที่ 3 เป็นคำสั่ง copy ปกติ:
#!/bin/bash # This is a comment - you can type anything you want here cp file1.txt /home/USERNAME/scripts/file2.txt
Hashes มีประโยชน์แม้ไม่เขียน script เพราะ cancel ส่วนของคำสั่งได้ ลองคำสั่งง่ายๆ:
echo I am YOUR_NAME
ลองอีกแบบ:
echo I am #YOUR_NAME
จะเห็นแค่ "I am" ใน version ที่สอง เพราะ hash cancel ทุกอย่างหลังมัน
Ranges ([])
กำหนด character ranges โดยหุ้มใน brackets ([]) ดูการทำงาน สมมติอยากหาโฟลเดอร์ขึ้นต้นด้วย D หรือ M พิมพ์:
ls [DM]*
อาจอยู่ในโฟลเดอร์เต็มไปด้วย subfolders ตั้งชื่อตามปี แทน copy โฟลเดอร์ 5 ปีก่อนไป /home/USERNAME/backup:
cp -r 201[56789] /home/USERNAME/backup
ลดรูปได้ด้วย dash (-):
cp 201[5-9] /home/USERNAME/backup
Bash จะ iterate 5 ถึง 9 รวมตัวเลขระหว่างทาง
Redirection (<>)
ใช้ angle brackets (<>) redirect input หรือ output ของคำสั่ง ตัวอย่าง คำสั่ง:
ls >> list.txt
จะ redirect output ของ ls บันทึกไป "list.txt"
สังเกต double right-angle bracket (>>) append output ของคำสั่งต่อท้ายไฟล์ รันซ้ำจะต่อท้ายเนื้อหาเดิม หากต้องการ replace เนื้อหาด้วยผลลัพธ์ใหม่ ใช้ single right-angle bracket (>):
ls > list.txt
Pipes (|)
รวมคำสั่งต่างๆ เป็น larger whole เพื่อผลลัพธ์ซับซ้อนมากขึ้น ด้วย pipes (|) คล้าย redirection (รายละเอียดความคล้าย/ต่างที่นี่)
สมมติมีไฟล์ใหญ่หลายพัน entries อยากหาชื่อของคุณ แทนที่จะหาใน text editor ทำนี้:
cat entries.txt | grep 'YourName'
ในกรณีนี้ output ของ "entries.txt" จะถูก pipe ไปคำสั่ง grep
Command Separator (;)
Bast ให้ออกคำสั่งหลายคำสั่งพร้อมกัน โดยคั่นด้วย semicolons (;) ตัวอย่าง copy 2 โฟลเดอร์ไป 2 ปลายทางด้วยคำสั่งเดียว:
cp folder1 destination1; cp folder2 destination2
Semicolon แยกคำสั่ง 2 ตัว และบอก Bash ให้ execute sequentially ใช้ได้มากกว่า 2 คำสั่ง
Wildcards (*)
คุณน่าจะใช้ asterisk (*) ในคำสั่งบ้าง มันจับคู่ลำดับตัวอักษรใดๆ และอนุญาต action เช่น copy ไฟล์ JPG ทั้งหมดจากโฟลเดอร์หนึ่งไปอีกโฟลเดอร์:
cp /home/USERNAME/folder1/*.jpg /home/USERNAME/folder2/
Question mark (?) เป็น wildcard ใน Bash แต่จับคู่แค่ single character ตัวอย่าง:
cp /home/USERNAME/201?/*.jpg /home/USERNAME/folder2/
คำสั่งนี้ copy jpg ทั้งหมดในโฟลเดอร์ขึ้นต้น "201" เนื่องจาก wildcard แปลว่าตัวอักษร alphanumeric ใดๆ ไม่ใช่แค่ตัวเลข คำสั่งนี้ก็จะ copy โฟลเดอร์ชื่อ "201A" หรือ "201z" ด้วย
Launch in Background (&)
รันคำสั่งเป็น background process ได้โดยเพิ่ม ampersand symbol (&) ท้ายคำสั่ง:
cp /home/USERNAME/Downloads/huge_file.zip /home/USERNAME/backups &
ข้างต้นจะเริ่ม copy ไฟล์ huge_file.zip และย้ายไป background ทันที ให้คุณใช้ terminal ต่อได้ คำสั่งจะ exit เองเมื่อเสร็จ หากต้องการดึงกลับ foreground พิมพ์ fg กด Enter
Variables ($)
Dollar sign ($) ให้ตั้งค่า variables ใช้ในคำสั่ง ลองพิมพ์ใน terminal:
myname=YOUR_NAME myage=YOUR_AGE echo "I'm $myname and I'm $myage years old"
สังเกต: ไม่มี dollar sign ตอน assign ค่าให้ variables
Escapes (\) และ Quotes (\"")
หากต้องการใช้ special characters ใดๆ ตรงๆ ในคำสั่ง ต้อง escape โดยขึ้นต้นด้วย backslash (\) ตัวอย่าง ไฟล์ชื่อมี exclamation mark ต้องพิมพ์ \! แทน เพื่อให้ Bash ตีความว่าเป็น exclamation mark ไม่ใช่ special character
วิธีอื่น ใช้ single quotes ('') หรือ double-quotes ("") หุ้มสตริง ตัวอักษรพิเศษในนั้นจะถูกตีความเป็นตัวอักษรจริง มีความแตกต่างระหว่าง single และ double quotes: single quotes evaluate enclosed string เป็น text ส่วน double quotes อนุญาตใช้ variables ($) ภายในสตริงที่หุ้ม
สรุป
ข้างต้นไม่ใช่ special characters ทั้งหมดใน Bash แต่เป็นที่เราคิดว่ามีประโยชน์มากที่สุดสำหรับการผจญภัยในเทอร์มินัลทุกวัน อย่าลืมดู keyboard shortcuts สำหรับเคลื่อนที่เร็วใน Bash แจ้งใน comments หากเราพลาด special character สำคัญไหน