Bash History – What Does !$ Mean

bashcommand history

I'm following through a tutorial and it mentions to run this command:

sudo chmod 700 !$

I'm not familiar with !$. What does it mean?

Best Answer

Basically, it's the last argument to the previous command.

!$ is the "end" of the previous command. Consider the following example: We start by looking for a word in a file:

grep -i joe /some/long/directory/structure/user-lists/list-15

if joe is in that userlist, we want to remove him from it. We can either fire up vi with that long directory tree as the argument, or as simply as vi !$ Which bash expands to:

vi /some/long/directory/structure/user-lists/list-15

(source; handy guide, by the way)


It's worth nothing the distinction between this !$ token and the special shell variable $_. Indeed, both expand to the last argument of the previous command. However, !$ is expanded during history expansion, while $_ is expanded during parameter expansion. One important consequence of this is that, when you use !$, the expanded command is saved in your history.

For example, consider the keystrokes

  • echo Foo Enter echo !$ Jar Enter Up Enter; and

  • echo Foo Enter echo $_ Jar Enter Up Enter.

(The only characters changed are the $! and $_ in the middle.)

In the former, when you press Up, the command line reads echo Foo Jar, so the last line written to stdout is Foo Jar.

In the latter, when you press Up, the command line reads echo $_ bar, but now $_ has a different value than it did previously—indeed, $_ is now Jar, so the last line written to stdout is Jar Jar.

Another consequence is that _ can be used in other parameter expansions, for example, the sequence of commands

printf '%s '    isomorphism
printf '%s\n'   ${_%morphism}sceles

prints isomorphism isosceles. But there's no analogous "${!$%morphism}" expansion.

For more information about the phases of expansion in Bash, see the EXPANSION section of man 1 bash (this is called Shell Expansions in the online edition). The HISTORY EXPANSION section is separate.

Related Question