Bash的命令号仅用于显示。
首先,一些背景bashref
:
命令号和历史号通常是不同的:命令的历史号是它在历史列表中的位置,其中可能包括从历史文件中恢复的命令(* note Bash History Facilities::),而命令号是在当前shell会话期间执行的命令序列中的位置。
深入研究源代码,parse.y
我们可以'\#'
解析为全局静态变量current_command_number
:
case '#':
n = current_command_number;
/* If we have already incremented current_command_number (PS4,
${var@P}), compensate */
if (orig_string != ps0_prompt && orig_string != ps1_prompt && orig_string != ps2_prompt)
n--;
temp = itos (n);
goto add_string;
它仅具有其他用途:in中eval.c
,在运行命令时会递增:
# ...
current_command_number++;
executing = 1;
stdin_redir = 0;
execute_command (current_command);
保留的只是一个数字,而不是实际命令甚至是等效的历史记录编号。因此,在执行每个命令时,bash会忘记与哪个命令编号关联的命令,从而使该命令编号不可用于显示和滚动参考之外的任何其他操作。