'$' 预定义的 shell 变量(称为“$$”)。它有什么?

'$' 预定义的 shell 变量(称为“$$”)。它有什么?

我有一个拼写错误,在 bash 脚本中写了 $$ (作为 echo 的参数)。它打印了一个数字(1979)。我试了很多次,都打印出相同的数字,所以我认为这可能与 Unix 纪元有关。我没有在 bash 手册或互联网上找到任何有关它的信息。然后我尝试了基本的 sh;它打印了一个不同的数字,5755,并且在关闭并打开一个新的 sh 后,它打印了一个略有不同的数字。

该变量应该保存什么?这个数字有什么意义呢?

答案1

它是许多特殊 shell 变量之一。从POSIX 标准与此相关:

$

扩展为所调用 shell 的十进制进程 ID。在子 shell 中(参见Shell执行环境),$应扩展到与当前 shell 相同的值。

其他特殊的 shell 变量包括!(最近启动的后台任务的 PID)、?(最近终止任务的退出状态)、#(位置参数的数量)、*(位置参数,连接成单个字符串)、@(位置参数,作为列表)、-(当前 shell 选项)和0(零;shell 或脚本的名称)。

另外,来自bash手册的“特殊参数”部分:

$

扩展为 shell 的进程 ID。在()子 shell 中,它扩展为当前 shell 的进程 ID,而不是子 shell。

其他 shell 在其手册中也会有类似的措辞。

简而言之,$通过键入 获得其值的变量$$保存了当前 shell 进程的进程 ID (PID)。

您可以像这样仔细检查:

% echo "$$"
85776
% ps -p "$$"
  PID TT  STAT        TIME COMMAND
85776 p1  SN       0:00.19 -zsh (zsh)

这表明$$我的特定 shell 进程扩展到 85776,并且这个 PID 确实对应于zsh我正在使用的登录 shell。

答案2

该变量显示当前 shell 的 PID,即进程 ID。每次您在给定 shell 中回显(或访问)该变量时,它都是相同的。每当您启动新 shell(或子 shell)并访问它时,它都会与原始 shell 不同。

相关内容