为什么在使用 Bash 的内置命令历史功能重新运行包含变量的先前命令时必须小心?

lin*_*807 0 bash command-history function variable

我知道!!重新运行命令,但是如果我重新运行一个在命令中有变量的命令,究竟会发生什么?

gle*_*man 5

好吧,让我们试试看:

$ 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
Run Code Online (Sandbox Code Playgroud)

因此,该命令似乎是在发生变量扩展之前添加到历史记录中的。