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" )
}