您如何回忆起与bash一起使用的上一个命令的最后一个(第n个?)传递的参数?


9

通常,我在同一文件上发出不同的命令。例如:

$ youtube-dl aB54c4p0eo #I made this video id up on the spot
$ mv aB54c4p0eo.flv kittens.flv
$ vlc kittens.flv
$ rm kittens.flv

有没有一种方法可以重用当前命令中的前一个参数,这样我就不必重写它了?

Answers:


15

alt-.固然不错,但是如果您碰巧已经知道要使用哪个编号的参数,则可以更快:!:nn上一个命令的th参数。

将此与魔术空间结合通常会很有帮助。要启用它,请放入.inputrc Space: magic-space。启用该功能后,当您在之后输入空格时!:2,它将立即扩展为其值,而不是等待您按下Enter键。使您免于意外抓住错误的论点。


9

在bash中,您可以使用快捷键Alt+ .
击中一次,将为您提供最后一个论点。击中更多内容将循环显示您的最后一个参数。


4

在bash中,“上一个命令行中的最后一个单词”的指示符是!!$

$ echo hello world
hello world
$ echo goodbye !!$
echo goodbye world # this is bash echoing actual cmd line before execution
goodbye world

您还可以使用“插入符号语法”替换命令行的初始部分;如果要在同一文件上执行多个命令,这将很方便:

file file.dat
^file^ls -l^ #gives `ls -l file.dat`
^ls -l^stat # gives `stat file.dat`

还有更多的可能性。有关详细信息,请参见bash(1)手册页中的“历史记录替换” 。


该插入符号语法实际上比按向上箭头并自己编辑命令行要慢...
badp 2010年

1
!!$可写!$了。
Mikel

3

在bash中,您还可以将$ _用作您键入的最后一个命令的最后一个命令行参数:

$ youtube-dl aB54c4p0eo #I made this video id up on the spot
$ mv aB54c4p0eo.flv kittens.flv
$ vlc kittens.flv
$ rm kittens.flv

变成:

$ youtube-dl aB54c4p0eo #I made this video id up on the spot
$ mv $_ kittens.flv
$ vlc $_
$ rm $_

0

一种相对较慢的方法是用调用先前的命令,并用较新的命令替换先前的命令。


我希望更快一些:)
badp 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.