From the manual pages on history:

Event Designators An event designator is a reference to a command line entry in the his‐ tory list. Unless the reference is absolute, events are relative to the current position in the history list.

   !      Start a history substitution, except when followed by  a  blank,
          newline, = or (.
   !n     Refer to command line n.
   !-n    Refer to the current command minus n.
   !!     Refer to the previous command.  This is a synonym for `!-1'.
          Refer  to the most recent command preceding the current position
          in the history list starting with string.
          Refer to the most recent command preceding the current  position
          in  the  history  list containing string.  The trailing ? may be
          omitted if string is followed immediately by a newline.
          Quick substitution.  Repeat the last command, replacing  string1
          with string2.  Equivalent to ``!!:s/string1/string2/'' (see Mod‐
          ifiers below).
   !#     The entire command line typed so far.

All the others make sense, but I can't figure out any usage for !# from the context. What does it do and how is it usually used?

  • If this was already asked, please point me toward the question it is duplicating. It is very hard to search for character sequences like !#. Apr 27, 2016 at 13:09
  • Did you try it? It just repeats everything you have typed on the current command line. e.g echo !# executes ` echo echo`
    – 123
    Apr 27, 2016 at 13:20
  • 1
    For example, if you start a command with 'ls' then follow with ' !#', the command would read 'ls ls'. Something more useful would be modifying a copy of the current line's last argument, a long filename maybe. 'cp longname !#:$' would expand to 'cp longname longname'. Use your bind key sequence (esc-ctrl-e by default I think?) for history expansion to "expand" the !#.
    – mtklr
    Apr 27, 2016 at 13:21
  • In the related posts is an excellent example: unix.stackexchange.com/questions/236382/…
    – muru
    Apr 27, 2016 at 13:23

1 Answer 1


Answer here: What does !#:3 mean in a shell command

Basically, you can use it to shorten a command in combination with ':n', so:

$ cd /home/me/some/super/deep/dir/that/i/do/not/want/to/type/again ; ll !#:2 

Of course this is a bit silly example, because you could just do ll, but you get the idea, it can be used in sh scripts.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .