358
votes

Is there a way in Bash to recall the argument of the previous command?

I usually do vi file.c followed by gcc file.c.

Is there a way in Bash to recall the argument of the previous command?

7

7 Answers

643
votes

You can use $_ or !$ to recall the last argument of the previous command.

Also Alt + . can be used to recall the last argument of any of the previous commands.

182
votes

If the previous command had two arguments, like this

ls a.txt b.txt

and you wanted the first one, you could type

!:1

giving

a.txt

Or if you wanted both, you could type

!:1-2

giving

a.txt b.txt

You can extend this to any number of arguments, eg:

!:10-12
106
votes

!!:n where n is the 0-based position of the argument you want.

For example:

echo 'one' 'two'
# "one two"

echo !!:2
# "two"

The ! prefix is used to access previous commands.

Other useful commands:

  • !$ - last argument from previous command
  • !^ - first argument (after the program/built-in/script) from previous command
  • !! - previous command (often pronounced "bang bang")
  • !n - command number n from history
  • !pattern - most recent command matching pattern
  • !!:s/find/replace - last command, substitute find with replace

More info on command history

78
votes

In the command line you can press esc-. or alt+.

It cycles through the last argument of your previous commands.

31
votes

If you know the number given in the history for a particular command, you can pretty much take any argument in that command using following terms.

Use following to take the second argument from the third command in the history,

!3:2

Use following to take the third argument from the fifth last command in the history,

!-5:3

Using a minus sign, you ask it to traverse from the last command of the history.

23
votes

!* runs a new command with all previous arguments.

ls /tmp
cd !*
#you are now in /tmp
19
votes

Yes, you can use !$ to recall the last argument of the preceding command.