如何从历史记录中的最后一个命令访问第二个参数?


11

我开始学习一些正则表达式,因此我反复使用此命令:

grep pattern /usr/share/dict/american-english 

只有带有模式的部分会发生变化,因此我不得不一次又一次写出长表达式“ / usr / share / dict / american-english ”。

有人说,可以通过键入隐含的字符组合而不是完整的表达式从命令历史中扩展命令的自变量。你能告诉我那些神秘的字符组合吗?


这是关于第二个参数还是最后一个参数?
mikeserv 2015年

在这种情况下,最后一个参数恰好是第二个,我没有明确区分。
Abdul Al Hazred 2015年

在这种情况下,bashdashzshmksh,和ksh(至少,我是知道的)都将认识到$_最后ARG特殊参数(仅交互模式中的某些做到这一点,虽然)。它就像变量一样扩展:grep somepattern filename; grep otherpattern "$_"。通常,您可以在的输出中看到其内容set
mikeserv

Answers:


23

您可以使用<M-.>(或者<Esc>.如果您的Meta键正用于其他用途),即Meta-dot(或<esc>点),其中Meta通常是Alt键,则可以调用上一个命令的最后一个参数。所以,首先你要输入

$ grep foo /usr/share/dict/american-english

然后,如果您想grep进行其他操作,则可以输入

$ grep bar

键入一个空格后,然后Esc.(即,先按Escape键,然后按句号键):

$ grep bar /usr/share/dict/american-english

您还可以使用以下任一方法:

$ grep bar !:2
$ grep bar !$

其中!:2和分别!$表示“第二个参数”和“最后一个参数”。


这适用于使用emacs(默认)绑定使用readline的bash和shell:editing-mode vi设置后,您需要为~/.inputrcfor 添加绑定yank-last-arg,对于Zsh,您需要绑定insert-last-word...
jasonwryan 2015年

@jasonwryan,如果这是你想要的最后ARG,然后在任意的(互动) zshbashkshmksh,或dash弹你可以使用$_。POSIXLY是结合已经设置,不过,ESC _set -o vi生效。
mikeserv 2015年

@mikeserv谢谢Mike,我必须为它的兼容性而反弹……
jasonwryan 2015年

@jasonwryan-没问题-这恰好是我所知道的唯一的外壳键盘技巧-我很想记住/配置所有这些快速键入的快捷方式。如果您不介意,则具有什么兼容性?您是否使用某些程序来做不同的事情?哦,我还记得_letter别名绑定的ESC @letter,但这只是因为我仍然不知道如何使它在bsd下工作editline
mikeserv

@mikeserv我以这种方式进行绑定,无论我使用的是Bash还是Zsh(均在vi模式下)还是在具有Bash的计算机上(在Emacs模式下),它都是相同的(这是我真正尝试过的绑定之一)。
jasonwryan 2015年

2

通常(使用Bash) <Esc> N <Esc> .将前一个命令的第N个参数调回当前命令行(其中N是从0开始的)。

对于最后一条命令的第二个参数,应为:

<Esc> 1 <Esc> .

如果您想要第三个参数,那么

<Esc> 2 <Esc> .

... 等等。

正如其他人提到的那样,如果您要使用一个命令的最后一个参数,则可以使用以下方法来实现特定的快捷方式:

<Esc> .

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.