Khi một tập lệnh gọi một tập lệnh khác, các biến của tập lệnh mẹ có thể được xuất ra và sau đó chúng sẽ hiển thị trong tập lệnh con. Xuất các hàm là một khái quát rõ ràng: xuất hàm từ cha mẹ, làm cho nó hiển thị ở trẻ.
Môi trường là cách thuận tiện duy nhất mà một quá trình có thể truyền dữ liệu tùy ý cho con của nó. Dữ liệu phải được sắp xếp thành các chuỗi không chứa byte rỗng, điều này không gây khó khăn cho các hàm shell. Có các phương pháp tiềm năng khác, chẳng hạn như khối bộ nhớ dùng chung hoặc tệp tạm thời được truyền qua bộ mô tả tệp, nhưng chúng có thể gây ra sự cố với các chương trình trung gian không biết phải làm gì với chúng hoặc sẽ đóng chúng. Các chương trình dự kiến sẽ chạy trong một môi trường có chứa các biến mà họ không biết hoặc không quan tâm, vì vậy họ sẽ không ghi đè hoặc xóa chúng.
Việc lựa chọn sử dụng tên hàm làm tên của biến môi trường là một điều lạ. Đối với một điều, nó có nghĩa là một biến xuất khẩu đụng độ với một hàm xuất cùng tên.
Các chức năng xuất khẩu là một tính năng cũ. Các chức năng đã được thêm vào trình bao Bourne trong SVR2 và các chức năng được xuất trong trình bao Phiên bản 8 được phát hành cùng năm (1984). Trong shell đó, các biến và hàm sử dụng cùng một không gian tên. Tôi không biết làm thế nào chức năng xuất khẩu làm việc. Các gia truyền vỏ được dựa trên một biến thể Bourne trong đó có chức năng nhưng không xuất chúng.
ATT ksh được cho là hỗ trợ xuất các chức năng, nhưng nhìn vào nguồn hoặc chơi với nó, tôi không thể thấy rằng nó hoạt động, kể từ 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
Bản sao miền công cộng của Ksh (pdksh, mksh), dash và zsh không hỗ trợ chức năng xuất.