As variáveis de ambiente são específicas para cada processo. Quando um processo é iniciado, ele recebe uma cópia do ambiente (criado pelo processo que o inicia) e, uma vez iniciado, nenhum outro processo pode tocar nessa cópia.
No seu exemplo, quando você altera o valor de x
, você está fazendo isso no shell que está executando. Ao exportar variáveis, você diz ao shell que deseja que elas sejam copiadas para o ambiente de processos que o shell inicia subseqüentemente, mas isso não pode afetar os valores das variáveis nos processos que já foram iniciados. Portanto, temp.sh
, que tem seu próprio shell em execução, obtém o valor de x
no momento em que inicia, mas as alterações subsequentes feitas no x
no shell interativo que você está usando não são visíveis para o shell em execução temp.sh
.
(Estritamente falando root
poderia alterar o ambiente de um processo em execução, mas isso está além do escopo desta resposta.)