$ BASH_COMMAND变量有什么用?
根据Bash手册,环境变量BASH_COMMAND包含 当前正在执行或将要执行的命令,除非外壳程序由于陷阱而正在执行命令,在这种情况下,它是在陷阱发生时执行的命令。 撇开陷阱的情况,如果我理解正确,这意味着当我执行命令时,变量BASH_COMMAND包含该命令。这不是绝对清楚地表明变量是否是在执行命令后复位(也就是,只有avaialble 而命令正在运行,但不是之后),尽管有人可能会认为,既然是“命令当前正在执行或即将执行的” ,不是刚刚执行的命令。 但是让我们检查一下: $ set | grep BASH_COMMAND= $ 空的 我本来希望看到BASH_COMMAND='set | grep BASH_COMMAND='或者也许只是BASH_COMMAND='set',但是空虚使我惊讶。 让我们尝试其他方法: $ echo $BASH_COMMAND echo $BASH_COMMAND $ 嗯,这很有道理。我执行命令echo $BASH_COMMAND,因此变量BASH_COMMAND包含字符串echo $BASH_COMMAND。为什么这次这次有效,但以前却没有呢? 让我们再做set一次: $ set | grep BASH_COMMAND= BASH_COMMAND='echo $BASH_COMMAND' $ 等一下 它是在我执行该echo命令时设置的,此后并没有取消设置。但是当我set再次执行时,BASH_COMMAND 没有设置该set命令。无论我在set这里执行命令的频率如何,结果都保持不变。那么,变量是在执行echo时设置的,而在执行时设置的set吗?让我们来看看。 $ echo Hello AskUbuntu Hello AskUbuntu $ set | grep BASH_COMMAND= …