Pada dasarnya, ini adalah argumen terakhir dari perintah sebelumnya.
!$adalah "akhir" dari perintah sebelumnya. Pertimbangkan contoh berikut: Kita mulai dengan mencari kata dalam file:
grep -i joe /some/long/directory/structure/user-lists/list-15
jika joe ada dalam daftar pengguna itu, kami ingin menghapusnya dari itu. Kita bisa menjalankan vi dengan pohon direktori panjang itu sebagai argumen, atau sesederhana vi !$bash mana yang diperluas menjadi:
vi /some/long/directory/structure/user-lists/list-15
( sumber ; panduan praktis, omong-omong)
Tidak ada bedanya dengan perbedaan antara !$token ini dan variabel shell khusus $_. Memang, keduanya memperluas argumen terakhir dari perintah sebelumnya. Namun, !$diperluas selama ekspansi riwayat , sementara $_diperluas selama ekspansi parameter . Salah satu konsekuensi penting dari ini adalah bahwa, ketika Anda menggunakan !$, perintah yang diperluas disimpan dalam riwayat Anda.
Misalnya, perhatikan penekanan tombol
(Satu-satunya karakter yang diubah adalah $!dan $_di tengah.)
Di yang pertama, ketika Anda menekan Up, baris perintah berbunyi echo Foo Jar, jadi baris terakhir yang ditulis untuk stdout adalah Foo Jar.
Pada yang terakhir, ketika Anda menekan Up, baris perintah berbunyi echo $_ bar, tetapi sekarang $_memiliki nilai yang berbeda dari yang sebelumnya — memang, $_sekarang Jar, jadi baris terakhir yang ditulis ke stdout adalah Jar Jar.
Konsekuensi lain adalah bahwa _dapat digunakan dalam ekspansi parameter lain, misalnya, urutan perintah
printf '%s ' isomorphism
printf '%s\n' ${_%morphism}sceles
cetakan isomorphism isosceles. Tetapi tidak ada ${!$%morphism}ekspansi " " analog .
Untuk informasi lebih lanjut tentang fase ekspansi di Bash, lihat EXPANSIONbagian man 1 bash(ini disebut Shell Expansions dalam edisi online). The HISTORY EXPANSIONbagian terpisah.
echosesuatu jika Anda tidak yakin apa yang akan dilakukan.