为什么子外壳中的$$等于父外壳中的$$?

问题描述 投票:0回答:1
#! /bin/bash

func1()
{
        echo $$
}

echo $$
( func1 )

这给出结果:

9644
9644

我希望它们会有所不同。任何人都可以解释为什么不是吗?

shell
1个回答
2
投票

PARAMETER EXPANSIONman 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
© www.soinside.com 2019 - 2024. All rights reserved.