bash history라는 것은 bash에서 제공하는 '사용자가 입력한 커맨드에 대한 기록'을 의미한다.
history라는 커맨드를 실행시키면 다음과 같은 커맨드 목록이 보여진다.
$ history
   13  ls root
   14  ls
   15  history
   16  cat /proc/uptime
   17  history

사용자가 입력한 커맨드 앞에 번호가 붙여져 있다. '!'를 입력하고 번호를 붙이면 좀전(?)에 입력한 명령을 다시 반복할 수 있다.
$ !16
cat /proc/uptime
6671661.02 52919355.38
'!'는 히스토리목록을 참조함을 의미한다. '!'다음에 음수값을 쓰면 히스토리목록을 거슬러 올라간 명령을 수행한다.
$ !-2
history

다음과 같이 vi에디터로 'a.txt'를 수정하고 나와서 좀전에 수행한 'vi a.txt'를 다시 실행하기 위해서 다음과 같이 '!'뒤에
'vi'를 붙이면 'vi'로 시작하는 커맨드를 거슬러 올라가면서 찾는다. '!!'는 바로전에 실행했던 명령어로서 '!-1'과 같은 의미이다.

$ vi a.txt
$ ls
$ !vi
$ !!

명령행에서 '워드지정자'를 지정하기 위해서는 '!:'을 접두어로 사용한다.

$ ls a.txt b.txt c.txt
a.txt b.txt c.txt
$ ls !:1
a.txt

위와 같이 '!:1'는 바로 전 명령문에서 2번째 워드를 지정한다. 첫번째워드(즉,커맨드)는 '!:0'가 된다.
마지막 워드는 '!:$' 또는 그냥 '!$'라고 할 수 있다.
$ ls a.txt b.txt c.txt
a.txt b.txt c.txt
$ ls !:$
c.txt

$ ls a.txt b.txt c.txt
a.txt b.txt c.txt
$ ls !$
c.txt

워드지정자에 범위도 지정할 수 있다.
$ ls a.txt b.txt c.txt
a.txt  b.txt  c.txt
$ ls !:2-3
ls b.txt c.txt
b.txt  c.txt