คิดว่าคำสั่ง 'แหล่งที่มา' ในคำสั่ง 'รวม' ใช้เนื้อหาของการโต้แย้งและเรียกใช้ราวกับว่ามันถูกเรียกใช้โดยตรง ในกรณีนี้คำสั่งของคุณคือ 'แหล่งที่มา' พร้อมด้วยอาร์กิวเมนต์ 'run.sh' และ run.sh จะถูกดำเนินการเหมือนกับคุณพิมพ์เนื้อหาของ run.sh ลงในบรรทัดคำสั่งของคุณ
เมื่อคุณเรียกใช้ './run.sh', './run.sh' เป็นคำสั่งของคุณและไม่มีข้อโต้แย้งใด ๆ เนื่องจากไฟล์นี้เป็นข้อความธรรมดาและไม่ใช่ไบนารีเชลล์ของคุณจึงมองหาล่ามที่ shebang ('#!' ในบรรทัดแรก) และค้นหา '/ bin / bash' ดังนั้นเชลล์ของคุณจะเริ่มต้นอินสแตนซ์ใหม่ของ bash และเนื้อหาของ run.sh จะถูกเรียกใช้ภายในอินสแตนซ์ใหม่นี้
ในอินสแตนซ์แรกเมื่อ bash มาถึงคำสั่ง 'exit' มันจะถูกดำเนินการเหมือนกับคุณพิมพ์ลงในบรรทัดคำสั่ง ในอินสแตนซ์ที่สองจะถูกดำเนินการในกระบวนการทุบตีเปลือกของคุณเริ่มต้นดังนั้นเฉพาะอินสแตนซ์ของการทุบตีนี้ได้รับคำสั่ง 'exit'
เมื่อคุณพิมพ์บรรทัดลงในทุบตีสิ่งใดก่อนที่ช่องว่างแรกจะถือว่าเป็นคำสั่งและสิ่งที่ตามมาจะถือว่าเป็นข้อโต้แย้ง คำสั่ง '.' เป็นนามแฝงของ 'แหล่งที่มา' เมื่อคุณเรียกใช้ ' run.sh 'the'. ' เป็นคำสั่งที่เป็นของตัวเองเนื่องจากแยกออกจากอาร์กิวเมนต์ของช่องว่าง เมื่อคุณเรียกใช้ './run.sh' คำสั่งของคุณคือ './run.sh' และ '.' เป็นส่วนหนึ่งของเส้นทางสัมพัทธ์ที่จะ run.sh ด้วย ' แสดงโฟลเดอร์ปัจจุบันของคุณ
$- = *i*
งานอย่างไร?