โดยทั่วไปมันเป็นอาร์กิวเมนต์สุดท้ายของคำสั่งก่อนหน้า
!$
คือ "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
บางสิ่งหากคุณไม่แน่ใจว่าจะทำอะไร