Bash の組み込みコマンド履歴機能を使用して、変数を含む以前のコマンドを再実行するときに注意する必要があるのはなぜですか?

Bash の組み込みコマンド履歴機能を使用して、変数を含む以前のコマンドを再実行するときに注意する必要があるのはなぜですか?

コマンドを再実行することはわかっています!!が、コマンド内に変数が含まれるコマンドを再実行すると、具体的に何が起こるのでしょうか?

答え1

さて、試してみましょう:

$ foo=bar
$ echo $foo
bar
$ foo=qux
$ !-2
echo $foo
qux
$ history
...
  219  foo=bar
  220  echo $foo
  221  foo=qux
  222  echo $foo
  223  history

コマンドが履歴に追加されたようです前に変数の拡張が発生します。

答え2

試行錯誤してみると、すぐに結果が出て役に立つようです。質問する前に、自分で試してみるといいでしょう。そうすれば、情報に基づいた詳細な質問をすることができます :)

あなたはこの分野にかなり不慣れなようですので、おそらく以下の内容が役に立つでしょうか?

$ history -c
$ FOOD="Bananas"
$ echo $FOOD
Bananas
$ history
  137  FOOD="Bananas"
  138  echo $FOOD
  139  history
$ !138
echo $FOOD
Bananas

ご覧のとおり、historyコマンドは期待どおりに動作しました。138 を実行すると、最初に実行したときとまったく同じコマンドが実行されました。

プロのヒント:man興味のあるコマンドについての詳細を読むには、 コマンドを使用します。例:

man history

Q完了したら終了と入力します。

乾杯!

関連情報