5

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'.
   !string
          Refer  to the most recent command preceding the current position
          in the history list starting with string.
   !?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.
   ^string1^string2^
          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?

terdon
  • 242,166
user1717828
  • 3,542
  • If this was already asked, please point me toward the question it is duplicating. It is very hard to search for character sequences like !#. – user1717828 Apr 27 '16 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 '16 at 13:20
  • 2
    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 '16 at 13:21
  • In the related posts is an excellent example: http://unix.stackexchange.com/questions/236382/what-does-3-mean-in-a-shell-command?rq=1 – muru Apr 27 '16 at 13:23

1 Answers1

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.