【发布时间】:2015-03-19 10:01:04
【问题描述】:
如何在 bash 交互式 shell 中轻松地从上一个命令中获取倒数第二个(倒数第二个)单词/参数?我经常在后台运行命令,我想获取&之前指定的文件,例如,
% echo foo > /tmp/foo &
% cat !$
% &
在上面的示例中,!$ 给出了最后一个单词&。但我想要倒数第二个参数,/tmp/foo
请注意,可以使用范围如 !-1:3 的词指示符,但这对于包含大量词的命令是不切实际的,因为它不能很快看出有多少词,例如,
% (set -x; date; pwd; git status; git diff; git log | tail -30; date; args=--verbose time make test; date) >& /tmp/log/make.test.20150122-Thu-0834 &
% echo !-1:30
/tmp/log/make.test.20150122-Thu-0834
上面的例子可行,但你要数一数,知道你要的词是第30个词,既费时又容易出错。
有没有简单的方法来获取倒数第二个(倒数第二个)单词?
更新:
请注意,我正在寻找要在命令行上键入的内容(例如,历史扩展,如!! 事件指示符,或$ word designator),而不是使用 readline 键绑定(例如,esc 键)。
(请注意,这个问题是指交互式 shell 中前一个命令的参数,而不是从命令行传递给 shell 脚本的参数,正如这里的一些答案和 cmets 所指的那样。)
【问题讨论】:
-
$_为您提供最后一个命令的最后一个参数,但这意味着foo的echo foo因为它不计算非参数,例如 I/O 重定向或后台.
标签: bash shell command-line command-line-arguments interactive-shell