Linux 变量未按预期在函数中打印

Linux 变量未按预期在函数中打印,linux,bash,Linux,Bash,我有这个: 我希望在f1()中能够访问变量$pid。但是我的脚本没有打印函数f1()中的值。你能解释一下吗 #!/bin/sh f1() { echo in f1 pid is $pid } f2() { sleep 1 f1 } f2 & pid=$! echo f2 bg pid is $pid 输出 f2 bg pid is 15095 in f1 pid is 在将f2分叉到父进程中之后,您正在父进程中分配pid,因此无法跨进程访问它。在将

我有这个:

我希望在
f1()
中能够访问变量
$pid
。但是我的脚本没有打印函数
f1()
中的值。你能解释一下吗

#!/bin/sh

f1()
{
    echo in f1 pid is $pid
}


f2()
{
    sleep 1
    f1
}

f2 &

pid=$!

echo f2 bg pid is $pid
输出

f2 bg pid is 15095
in f1 pid is

在将
f2
分叉到父进程中之后,您正在父进程中分配
pid
,因此无法跨进程访问它。在将
f2
分叉到自己的进程中之后,您可以访问自己的进程的pid,因为您正在父进程中分配
pid
,因此无法跨进程访问它。根据您试图表达的内容,您可以以
$$

的形式访问自己的进程的pid,也可以以$PPID的形式访问父进程。子shell保留与
$$
$PPID
相同的值,因此这可能不是您想要的。避免这种情况的一种方法是启动一个新的shell实例。通过fork执行的子shell永远不会保留与其父shell相同的
$$
$PPID
值,因为这样做毫无意义。或者父进程作为$PPID,取决于您试图表达的内容。子shell保留相同的
$$
$PPID
值,因此这可能不是您想要的。避免这种情况的一种方法是启动一个新的shell实例。通过fork执行的子shell永远不会保留与其父shell相同的
$$
$PPID
值,因为这样做毫无意义。