Trong Bash, có một số toán tử tiện dụng để lặp lại các phần của lệnh cuối cùng:
!^mở rộng đến đối số đầu tiên của lệnh trước đó, vd$ echo one "two three" one two three $ echo !^ echo one one!$mở rộng đến đối số cuối cùng của lệnh trước đó, vd$ echo one "two three" one two three $ echo !$ echo "two three" two three!*mở rộng cho tất cả các đối số của lệnh trước đó, vd$ echo one "two three" one two three $ echo !* echo one "two three" one two three
(Theo như tôi hiểu, đây là cú pháp đường cho !!:^, !!:$và !!:*tương ứng, nơi !!là một vấn thiết kế trường hợp mở rộng để các lệnh trước, và ^, $và *là định danh từ, xem Bash Reference Manual hoặc man bash.)
Đây thường là khá tiện dụng. Nhưng nó thậm chí còn mát hơn với các phím tắt:
Khi bạn nhấn Alt+ .hoặc Alt+ _, đối số cuối cùng của lệnh trước được chèn vào lệnh hiện tại, tương tự như khi bạn đã viết
!$tại điểm đó.Cũng có thể nhấn Alt+ Ctrl+ yđể chèn đối số đầu tiên của lệnh trước đó, như thể bạn đã viết
!^tại thời điểm đó.
(Xem Thư viện Đọc GNU hoặc info readline.)
Tôi có xu hướng thích các phím tắt trên các toán tử lịch sử của Bash, bởi vì tôi có thể thấy những gì tôi đang chèn trước khi tôi thực sự thực hiện lệnh. Tuy nhiên, dường như không có một phím tắt nào cho phép tôi chèn tất cả các từ của lệnh trước đó, tức là một công việc không phải !*là công việc. Ít nhất là tôi không thể tìm thấy nó.
Có một lối tắt như vậy? Nếu không, có thể cấu hình thư viện readline để thêm một, và làm thế nào?
zsh, nếu bạn gõ echo !*và sau đó nhấn TAB, bạn có hiệu ứng mong muốn. Nói chung, TAB trong khi đọc sẽ mở rộng tất cả các mở rộng. Rất tiện dụng; Có lẽ bash sẽ có một số cấu hình để có hiệu lực tương tự? @ Vì vậy, tôi nghĩ rằng đây là dòng đọc thành bash, không phải trình giả lập thiết bị đầu cuối - mặc dù không chắc chắn.
man bash(ở đâu đó tại dòng 3030)
\e.và \e_được ánh xạ tới chức năng đọc yank-last-argvà \e\C-yđược ánh xạ tới yank-nth-arg. Đáng buồn thay, dường như không có lệnh (đơn) nào thêm nhiều đối số trước đó cùng một lúc.