我正在通过Advanced Bash-Scripting Guide学习 bash-shell 。这本书说
括号内的命令列表开始一个子shell。
所以,我尝试了这段代码:
echo "in parentshell \$\$=$$"
( echo "in subshell \$\$=$$" )
后者应该打印子进程的pid 我认为,但实际上结果与父shell 的pid 是一样的。谁能告诉我为什么?
根据参考手册的特殊参数部分,
$$
扩展为 shell 的进程 ID。在()
子shell 中,它扩展为调用shell 的进程ID,而不是子shell。
所以你观察到的行为没有什么奇怪的,它有完整的记录。
正如 Ansgar Wiechers 在评论中正确指出的那样,
子shell的PID可以用变量来确定
$BASHPID
。
这方面的文档可以在参考手册的Bash 变量部分找到。在那里你会读到:
BASHPID
展开为当前 Bash 进程的进程 ID。这与$$
某些情况下不同,例如不需要重新初始化 Bash 的子 shell。
谢谢安斯加尔!
笔记。我真的不喜欢你正在阅读的参考资料。