Функции фигурных скобок будут выполняться внутри вызывающего процесса оболочки, если только им не нужен собственный подоболочек, который:
- когда вы запускаете их в фоновом режиме с
&
- когда вы запускаете их как ссылку в конвейере
Перенаправления или дополнительные env. переменные не будут вызывать новый подоболочек:
hw(){
echo hello world from $BASHPID
echo var=$var
}
var=42 hw >&2
echo $BASHPID #unexports var=42 and restores stdout here
Если вы определяете функцию с круглыми скобками вместо фигурных скобок:
hw()(
echo hello world from $BASHPID
)
hw
echo $BASHPID
это всегда будет работать в новом процессе.
Подстановка команд $()
также всегда создает процессы в bash (но не в ksh, если вы запускаете встроенные команды внутри него).