根据Bash 手册,环境变量BASH_COMMAND包含
当前正在执行或即将执行的命令,除非 shell 作为陷阱的结果正在执行命令,在这种情况下,它是在陷阱发生时正在执行的命令。
把那个陷阱角落放在一边,如果我理解正确的话,这意味着当我执行命令时,变量BASH_COMMAND包含该命令。这不是绝对清楚地表明变量是否是在执行命令后复位(也就是,只有avaialble而命令正在运行,但不是之后),尽管有人可能会认为,既然是“命令当前正在执行或即将执行的” ,不是刚刚执行的命令。
但是让我们检查一下:
$ set | grep BASH_COMMAND=
$
Run Code Online (Sandbox Code Playgroud)
空的。我本来希望看到BASH_COMMAND='set | grep BASH_COMMAND='或者只是看到BASH_COMMAND='set',但空虚让我感到惊讶。
让我们试试别的:
$ echo $BASH_COMMAND
echo $BASH_COMMAND
$
Run Code Online (Sandbox Code Playgroud)
嗯,这是有道理的。我执行命令echo $BASH_COMMAND,因此变量BASH_COMMAND包含字符串echo $BASH_COMMAND。为什么这次有效,而之前无效?
让我们再做set一次:
$ set | grep BASH_COMMAND=
BASH_COMMAND='echo $BASH_COMMAND'
$
Run Code Online (Sandbox Code Playgroud)
所以等等。它是在我执行该echo命令时设置的,之后没有取消设置。但是当我set再次执行时,BASH_COMMAND 没有设置为set命令。无论我在set这里执行命令的频率如何,结果都保持不变。那么,是否在执行echo …