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 中不会产生副作用。