在 shell 上下文或 fork-n-exec 方式执行 bash 中执行 shell 函数



In bash命令以fork-and-exec方式执行。同样,新进程被分叉(子壳(以执行脚本文件。我很好奇 shell 函数是如何解释和执行的?shell 函数中列出的命令是否也以 fork-and-exec 方式工作,或者它们在当前的 shell 上下文中执行。

函数在当前 shell 进程中运行。请注意,他们可以修改外壳的变量。

由于BASHPID扩展到当前进程的PID,因此您可以自行检查:

#!/bin/bash
function print_pid() {
    echo $BASHPID
}
echo $BASHPID
print_pid

显示的两个 PID是相同的。因此,不会发生fork。函数在当前 shell 进程中执行。

正如其他人所说,函数在当前的 shell 环境中运行。但是,请注意,通过命令或进程替换调用的任何内容(包括函数(都在单独的环境中运行(子 shell 或新进程,具体取决于它是什么(。因此,如果您执行类似 output=$(some_shell_func) 的操作,则该函数在父 shell 中不会产生副作用。

最新更新