Las funciones de llaves se ejecutarán dentro del proceso del shell de llamada, a menos que necesiten su propio subshell que es:
- cuando los ejecutas en segundo plano con
&
- cuando los ejecutas como un enlace en una tubería
Redirecciones o env extra. las variables no forzarán una nueva subshell:
hw(){
echo hello world from $BASHPID
echo var=$var
}
var=42 hw >&2
echo $BASHPID #unexports var=42 and restores stdout here
Si define la función con paréntesis en lugar de curvas:
hw()(
echo hello world from $BASHPID
)
hw
echo $BASHPID
siempre se ejecutará en un nuevo proceso.
La sustitución de comandos $()
también siempre crea procesos en bash (pero no en ksh si ejecuta incorporados dentro de él).