当我使用这些 shell 命令时:
[root@linux /tmp]# a=$$
[root@linux /tmp]# echo $a
3985
3985 这个值从何而来?为什么?
答案1
man bash
解释它。
Expands to the process ID of the shell. In a () subshell,
it expands to the process ID of the current shell, not the subshell.
答案2
$$ 是当前进程的 pid
尝试
主机@控制器:~$ echo $$ 12481 主机@控制器:~$ ps -p 12481 PID TTY 时间命令 12481 分/2 00:00:01 猛击 主机@控制器:~$
由于我们echo $$
在 bash 中执行,因此我们获取其当前的 pid
也知道
echo $? 是最后执行的命令的返回码。
$# 是参数的数量
$* 是传递给当前进程的参数列表
$[1 或 2 或 ... n] 每个对应参数的值
答案3
这就是为什么有些人用它来构造一个只临时使用然后被销毁的文件名,就像这个脚本片段一样。
SCRATCHFILE=/tmp/emphemeral.$$ ;
# Now have the script write to and read from the temp file
rm $SCRATCHFILE ;
如上所述,文件名中的 $$ 将是主脚本的 PID。
答案4
尝试“echo $$”你会得到答案。