Коли скрипт викликає інший сценарій, змінні батьківського сценарію можуть бути експортовані, а потім вони будуть видимі в дочірньому сценарії. Експорт функцій є очевидним узагальненням: експортуйте функцію від батьків, зробіть її видимою у дитини.
Навколишнє середовище - єдиний зручний спосіб, коли процес може передавати довільні дані своїм дітям. Дані повинні бути об'єднані в рядки, що не містять нульових байтів, що не представляє труднощів для функцій оболонки. Є й інші потенційні методи, такі як блоки спільної пам'яті або тимчасові файли, що передаються через дескриптори файлів, але вони можуть спричинити проблеми з проміжними програмами, які не знають, що з ними робити, або закриють їх. Програми очікують працювати в середовищі, яке містить змінні, про які вони не знають і не цікавляться, тому вони не будуть перезаписувати чи стирати їх.
Вибір використання назви функції як імені змінної середовища є дивним. По-перше, це означає, що експортована змінна стикається з функцією, що експортується з тим самим ім'ям.
Експортовані функції - це стара функція. Функції були додані в оболонку Bourne в SVR2 , а експортні функції в оболонці Версії 8 випущені в тому ж році (1984). У цій оболонці змінні та функції використовували один і той же простір імен. Я не знаю, як працював експорт функцій. Heirloom оболонки заснована на варіанті Bourne , який має функції , але не експортувати їх.
ATT ksh нібито підтримує функції експорту, але дивлячись на джерело або граючи з ним, я не можу побачити, що він робить, як ksh93u.
env -i /usr/bin/ksh -c 'f=variable; f () { echo function; }; typeset -fx f; /usr/bin/env; ksh -c f'
_=*25182*/usr/bin/env
PWD=/home/gilles
SHLVL=1
A__z="*SHLVL
ksh: f: not found
Клони відкритого домену Ksh (pdksh, mksh), dash та zsh не підтримують функції експорту.