为什么在使用 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完成后键入退出。

干杯!

相关内容