Veja man 7 environ . Quando seu shell executa outro processo - por qualquer sabor de exec (3) - esse processo herda o ambiente de seu antecessor. Um design conveniente para o seu shell pode ser manter duas listas: de variáveis de shell exportadas e não exportadas. Aqueles exportados podem ser mantidos no próprio ambiente do shell com putenv (3) e automaticamente herdados por quaisquer processos criados pelo seu shell. Aqueles não exportados podem estar em uma lista separada, acessível apenas ao shell.
Se esse tipo de coisa é interessante para você, você pode encontrar The Linux Programming Interface de Michael Kerrisk uma referência útil.