shell 函数和别名是否会派生子进程?

shell 函数和别名是否会派生子进程?

shell 函数和别名是否会派生子进程?或者它们都在shell进程内执行?

答案1

不。

别名是在将行解析为标记之前用一个(或多个)单词简单地替换某个字符串。不需要更改 shell 上下文。

从 bash 手册开始外壳函数:

Shell 函数在当前 shell 上下文中执行;没有创建新的流程来解释它们。

除非组成该函数的代码确实分叉了一个子进程,就像在 bash 中一样(…)(而不是在 ksh 中)。可以使用括号代替(或附加)花括号来定义函数。

测试:

#!/bin/bash
func(){ echo "$BASHPID"; }
fork()( echo "$BASHPID"; )
echo "$BASHPID"
func
fork

执行时:

$ ./script
8731
8731
8753

将fork函数理解为:

fork(){
        ( echo "BASHPID" )
      }

相关内容