如何在命令行中获取前一个命令的第 n 个参数?

How do you get nth argument of a previous command at command line?

如果您在进行互动 shell 并且键入类似以下内容:

echo this is it

然后你可以展开第一个参数:

echo !^    #=> echo this

或者你可以展开最后一个参数:

echo !$    #=> echo it

但现在我想知道:

我如何访问第 n 个参数?我浏览了 a related bash question,但似乎只有在脚本中才有效,因为 !n 只是浏览了我的命令历史记录(而不是我的参数历史记录)——例如

    echo !1 #=> echo ls

这是有道理的,因为

    history | grep -E '^\s+1 ' #=> 1  ls

但我想要的是echo !(some correct index) #=> echo is

这样:

~ $ echo this is it
~ $ echo !!:2
echo is
is

!!:n 是第 n 个参数
!!:n-$ 是从第 n 到最后的 args

注意:!! 扩展到最后一个命令


根据 OP 的编辑 ():

倒数第二个命令的第二个参数:

~ $ echo foo bar baz # This one is the target
foo bar baz
~ $ echo catz ratz batz
catz ratz batz
~ $ echo !-2:2
echo bar
bar

!-n 扩展为当前命令之前 'n' 个命令的命令。

注意:!-1!!是一样的。