Если мы посмотрим на следующий пример:
# testing(){ echo hello;}
# testing
hello
# echo $(testing)
hello
# echo testing >script
# ./script
./script: line 1: testing: command not found
# source ./script
hello
# export -f testing
# ./script
hello
Оказывается, что функцию bash
необходимо экспортировать только в том случае, если вы хотите использовать ее в сценарии без источников. Я пробовал несколько уровней подоболочек, поведение одинаковое. Может кто-то это подтвердить, потому что я считаю это противоречащим утверждению о том, что локальные переменные не существуют в подоболочках.