コマンドを実行するときに コマンドの前に echo を付けて試してみることがあります。
$ export testfile=dummy.txt $ echo rm $testfile rm dummy.txt
この後、echo を消して実行するわけですが !* を使うことで 同じことを簡単に実行できます。
$ export testfile=dummy.txt $ echo rm $testfile rm dummy.txt $ !* rm $testfile rm: cannot remove `dummy.txt': No such file or directory
!* には、前に実行したコマンドの「コマンドより後ろのワード」が格納されるため echo の後ろから実行されるわけです。
!^ だと「コマンドより後ろのワード」の先頭、 !$ が「コマンドより後ろのワード」の最後になります。
$ echo 1 2 3 4 5 1 2 3 4 5 $ echo !^ echo 1 1 $ echo 1 2 3 4 5 1 2 3 4 5 $ echo !$ echo 5 5
ちなみに前に実行したコマンド全体は !! に格納されるため !! だけだと、前のコマンドを再実行になります。
$ echo 1 2 3 4 5 1 2 3 4 5 $ !! echo 1 2 3 4 5 1 2 3 4 5
ちなみに、この「コマンドより後ろのワード」はパイプやリダイレクトも含みます。
$ echo 1 2 3 4 5 > /tmp/test.txt $ echo !$ echo /tmp/test.txt /tmp/test.txt
使うときは、ちょっとだけ注意です。