#! /bin/bash
func1()
{
echo $$
}
echo $$
( func1 )
这给出结果:
9644
9644
我希望它们会有所不同。任何人都可以解释为什么不是吗?
从PARAMETER EXPANSION
的man bash
部分:
$扩展为外壳的进程ID。 在()子Shell中,它扩展为当前Shell的进程ID,而不是子Shell。
这也是POSIX shell specification的要求:
$扩展为被调用shell的十进制进程ID。在子shell中(请参见Shell执行环境),“ $”应扩展为与当前shell相同的值。
如果需要子shell的进程ID,请使用$BASHPID
:
func1() { echo $BASHPID; }
echo $BASHPID
28365
( func1 )
28627