As funções são propagadas naturalmente para subshells :
greet () {
echo "hello, $1"
}
( echo "this is a subshell"; greet bob )
Mas eles não são e não podem ser propagados para processos de shell independentes que você inicia invocando o shell sob seu nome.
O Bash tem uma extensão para passar funções através do ambiente , mas não há tal coisa em outros shells. Embora você possa emular o recurso, ele exige a execução de código no shell aninhado de qualquer maneira. Você também pode fornecer suas definições de função no shell aninhado.