我有一个拼写错误,在 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 不同。