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 EXPANSION
bagian man 1 bash
(ini disebut Shell Expansions dalam edisi online). The HISTORY EXPANSION
bagian terpisah.
echo
sesuatu jika Anda tidak yakin apa yang akan dilakukan.