As funções de chaves curvadas serão executadas dentro do processo do shell de chamada, a menos que precisem de seu próprio subshell, que é:
- quando você os executa em segundo plano com
&
- quando você os executa como um link em um pipeline
Redirecionamentos ou env extra. variáveis não forçam um novo subshell:
hw(){
echo hello world from $BASHPID
echo var=$var
}
var=42 hw >&2
echo $BASHPID #unexports var=42 and restores stdout here
Se você definir a função entre parênteses, em vez de curvas:
hw()(
echo hello world from $BASHPID
)
hw
echo $BASHPID
sempre será executado em um novo processo.
A substituição de comandos $()
também sempre cria processos no bash (mas não no ksh se você executar os componentes internos dentro dele).