なぜ `!45`が `top`に変わるのですか?

なぜ `!45`が `top`に変わるのですか?

Ubuntu 12.04で文字列を検索しようとしていますが、結果は次のとおりです。

find . -exec grep -l "!45" {} \;

文字列 "!45"はもう検索されませんがtop。コマンドを呼び出す代わりに、「top」という用語の検索を開始します。-Fforを調べる前に、grep特殊文字が引用符の間のテキストとして扱われると思いました。

とにかくこれを見つけたので、私はそれが何であるか、何をするのか、なぜ存在するのかわかりません!

答え1

Bashシェルは、!45コマンド履歴からコマンド(またはまたは!32)を返します!873

イベントインジケータは、履歴リストのコマンドラインエントリへの参照です。参照が絶対的でない場合、イベントは履歴リストの現在の場所に基づいています。

空白、タブ、行末、「=」、または「(」(組み込みのshoptを使用してextglobシェルオプションが有効になっている場合)が続かない限り、履歴の交換を開始します。

!N

コマンドラインnを参照してください。

ここで確認してください詳細については、bashのマニュアルを参照してください。

関連情報