How do you get nth argument of a previous command

2020-06-15 07:00发布

If you're at an interactive shell and you type something like:

echo this is it

Then later you can expand the first argument:

echo !^    #=> echo this

Or you can expand the last argument:

echo !$    #=> echo it

But now I'm wondering:

How would I access the nth argument? I looked through a related bash question, but it seems like that only works when in a script, because !n just goes through my command history (instead of my argument history) - for example

    echo !1 #=> echo ls

which makes sense, because

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

but what I want is echo !(some correct index) #=> echo is

标签: zsh
1条回答
够拽才男人
2楼-- · 2020-06-15 07:15

This way:

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

!!:n is the n'th arg
!!:n-$ is args from n'th to last

Note: !! expands to the last command


As per OPs' EDIT (moved):

Second argument of the second to last command:

~ $ 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 expands to the command that was 'n' number of commands before the current command.

Note: !-1 and !! are the same.

查看更多
登录 后发表回答