Di Bash, ada beberapa operator praktis untuk mengulangi bagian dari perintah terakhir:
!^
memperluas argumen pertama dari perintah sebelumnya, misalnya,$ echo one "two three" one two three $ echo !^ echo one one
!$
memperluas argumen terakhir dari perintah sebelumnya, misalnya,$ echo one "two three" one two three $ echo !$ echo "two three" two three
!*
memperluas ke semua argumen dari perintah sebelumnya, misalnya,$ echo one "two three" one two three $ echo !* echo one "two three" one two three
(Sejauh yang saya mengerti, ini adalah gula sintaksis untuk !!:^
, !!:$
dan !!:*
masing - masing, di mana !!
penunjuk acara yang memperluas perintah sebelumnya, dan ^
, $
dan *
penentu kata, lihat Manual Referensi Bash atau man bash
.)
Ini seringkali cukup berguna. Tetapi semakin keren dengan pintasan keyboard:
Ketika Anda menekan Alt+ .atau Alt+ _, argumen terakhir dari perintah sebelumnya dimasukkan dalam perintah saat ini, sama seperti jika Anda telah menulis
!$
pada titik itu.Dimungkinkan juga untuk menekan Alt+ Ctrl+ yuntuk memasukkan argumen pertama dari perintah sebelumnya, seolah-olah Anda telah menulis
!^
pada titik itu.
(Lihat Perpustakaan Readline GNU atau info readline
.)
Saya cenderung lebih suka pintasan keyboard daripada operator sejarah Bash, karena saya bisa melihat apa yang saya masukkan sebelum saya benar-benar menjalankan perintah. Namun, sepertinya tidak ada jalan pintas yang memungkinkan saya untuk memasukkan semua kata dari perintah sebelumnya, yaitu kata yang !*
berfungsi. Setidaknya saya tidak dapat menemukannya.
Apakah ada jalan pintas seperti itu? Jika tidak, apakah mungkin untuk mengonfigurasi perpustakaan readline untuk menambahkannya, dan bagaimana caranya?
zsh
, jika Anda mengetik echo !*
dan kemudian menekan TAB, Anda memiliki efek yang diinginkan. Secara umum, TAB sambil membaca akan memperluas semua yang dapat diperluas. Sangat berguna; mungkin bash akan memiliki beberapa konfigurasi dengan efek yang sama? @Seth, saya pikir ini adalah readline ke bash, bukan terminal emulator - meskipun tidak yakin.
man bash
( di suatu tempat di garis 3030)
\e.
dan \e_
dipetakan ke fungsi readline yank-last-arg
dan \e\C-y
dipetakan ke yank-nth-arg
. Sayangnya sepertinya tidak ada perintah (tunggal) yang menambahkan beberapa argumen sebelumnya sekaligus.