<ก่อนหน้านี้ | เนื้อหา | ถัดไป>
การขยายตัว
ทุกครั้งที่เราพิมพ์คำสั่งและกดปุ่ม Enter ทุบตี ดำเนินการหลายขั้นตอนกับข้อความก่อนที่จะดำเนินการตามคำสั่งของเรา เราได้เห็นบางกรณีที่ลำดับอักขระอย่างง่าย เช่น “*” สามารถมีความหมายมากมายต่อเชลล์ได้อย่างไร กระบวนการที่ทำให้เกิดสิ่งนี้เรียกว่า การขยายตัว. ด้วยการขยาย เราป้อนบางสิ่งและมันถูกขยายเป็นอย่างอื่นก่อนที่เชลล์จะดำเนินการกับมัน เพื่อแสดงให้เห็นว่าเราหมายถึงอะไร ลองมาดูที่ เสียงสะท้อน คำสั่ง เสียงสะท้อน เป็นเชลล์บิวด์อินที่ทำงานง่ายมาก มันพิมพ์อาร์กิวเมนต์ข้อความบนเอาต์พุตมาตรฐาน:
[me@linuxbox ~]$ echo นี่คือการทดสอบ
นี่คือการทดสอบ
[me@linuxbox ~]$ echo นี่คือการทดสอบ
นี่คือการทดสอบ
ที่ค่อนข้างตรงไปตรงมา ข้อโต้แย้งใด ๆ ที่ส่งผ่านไปยัง เสียงสะท้อน ได้รับการแสดง ลอง- ตัวอย่างอื่น ๆ :
[me@linuxbox ~]$ เสียงสะท้อน *
เอกสารเดสก์ท็อป ls-output.txt รูปภาพเพลง เทมเพลตสาธารณะ วิดีโอ
[me@linuxbox ~]$ เสียงสะท้อน *
เอกสารเดสก์ท็อป ls-output.txt รูปภาพเพลง เทมเพลตสาธารณะ วิดีโอ
แล้วเกิดอะไรขึ้น? ทำไมไม่ เสียงสะท้อน พิมพ์ “*”? ตามที่เราจำได้จากการทำงานกับไวด์การ์ด อักขระ “*” หมายถึงจับคู่อักขระใดๆ ในชื่อไฟล์ แต่สิ่งที่เราไม่เห็นในการสนทนาครั้งแรกคือวิธีที่เชลล์ทำอย่างนั้น คำตอบง่ายๆ คือ เชลล์ขยาย “*” เป็นอย่างอื่น (ในกรณีนี้ ชื่อของไฟล์ในไดเร็กทอรีการทำงานปัจจุบัน) ก่อน เสียงสะท้อน คำสั่งถูกดำเนินการ เมื่อปุ่ม Enter คือ
เมื่อกด เชลล์จะขยายอักขระที่เข้าเงื่อนไขโดยอัตโนมัติบนบรรทัดคำสั่งก่อนดำเนินการคำสั่ง ดังนั้น เสียงสะท้อน คำสั่งไม่เคยเห็น “*” มีแต่ผลขยาย เมื่อรู้อย่างนี้ก็จะเห็นได้ว่า เสียงสะท้อน ประพฤติตามที่คาดไว้