โดยทั่วไปมันเป็นอาร์กิวเมนต์สุดท้ายของคำสั่งก่อนหน้า
!$คือ "end" ของคำสั่งก่อนหน้า ลองพิจารณาตัวอย่างต่อไปนี้: เราเริ่มต้นด้วยการค้นหาคำในไฟล์:
grep -i joe /some/long/directory/structure/user-lists/list-15
หาก joe อยู่ในรายการผู้ใช้นั้นเราต้องการลบเขาออกจากรายการ เราสามารถเริ่มต้นด้วย vi ด้วยต้นไม้ไดเรกทอรีที่ยาวเป็นอาร์กิวเมนต์หรือง่ายๆตามvi !$ที่ bash ขยายไปถึง:
vi /some/long/directory/structure/user-lists/list-15
(ที่มา ; คู่มือที่มีประโยชน์โดยวิธีการ)
มันคุ้มค่าที่ไม่มีอะไรแตกต่างระหว่างนี้โทเค็นและตัวแปรเปลือกพิเศษ!$ $_แน่นอนว่าทั้งคู่ขยายไปยังอาร์กิวเมนต์สุดท้ายของคำสั่งก่อนหน้า แต่!$จะขยายตัวในช่วงการขยายตัวของประวัติศาสตร์ในขณะที่$_มีการขยายช่วงการขยายตัวพารามิเตอร์ หนึ่งผลที่สำคัญของเรื่องนี้ก็คือเมื่อคุณใช้!$การขยายคำสั่งจะถูกบันทึกไว้ในประวัติศาสตร์ของคุณ
ตัวอย่างเช่นพิจารณาการกดแป้น
(ตัวละครที่เปลี่ยนแปลงเท่านั้นคือ $!และ$_ตรงกลาง)
ในอดีตเมื่อคุณกดUpบรรทัดคำสั่งจะอ่านecho Foo Jarดังนั้นบรรทัดสุดท้ายเขียนไป stdout Foo Jarคือ
ในตอนหลังเมื่อคุณกดUpบรรทัดคำสั่งจะอ่านecho $_ barแต่ตอนนี้$_มีค่าที่แตกต่างจากที่เคยทำก่อนหน้านี้จริง ๆ แล้ว$_คือตอนนี้Jarดังนั้นบรรทัดสุดท้ายเขียนไป stdout Jar Jarคือ
ผลที่ตามมาอีกประการหนึ่งคือ_สามารถใช้ในการขยายพารามิเตอร์อื่น ๆ เช่นลำดับของคำสั่ง
printf '%s ' isomorphism
printf '%s\n' ${_%morphism}sceles
isomorphism isoscelesพิมพ์ แต่ไม่มี${!$%morphism}การขยาย ""
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเฟสของการขยายใน Bash ให้ดูในEXPANSIONส่วนของman 1 bash(ซึ่งเรียกว่าการขยายเชลล์ในรุ่นออนไลน์) HISTORY EXPANSIONส่วนแยกต่างหาก
echoบางสิ่งหากคุณไม่แน่ใจว่าจะทำอะไร