Um processo não shell não possui variáveis shell. Um programa C tem variáveis C, um programa awk
tem awk
variáveis, um programa Perl tem variáveis Perl, etc., e todas elas são muito diferentes das variáveis do shell.
A razão pela qual outro processo não tem variáveis shell (ou acessa variáveis shell) é que variáveis shell não são exportadas (isto é, não são variáveis de ambiente), e também porque alguns shells permitem anexar mais informações a uma variável shell que apenas um valor de string, como atributos para variáveis somente de leitura, variáveis inteiras, etc. Esses atributos de tipo (consulte o comando interno typeset
) não podem ser aplicados a uma variável de ambiente e ser usado em outro processo.
Algumas conchas (como bash
) também suportam matrizes e matrizes associativas. Essas estruturas são muito complexas para o formato de par de valores-chave simples, em que a chave (o nome da variável) e o valor são strings de texto simples, impostas a variáveis de ambiente, o que significa que não podem ser exportadas para uso em um genérico outro processo.
Todos os processos têm acesso às variáveis de ambiente herdadas de seus processos pai. Dependendo da linguagem, existem diferentes maneiras de um programa acessá-las.
Um programa C pode usar getenv()
, um programa awk
pode usar sua matriz associativa ENVIRON
e um programa Perl pode usar seu %ENV
hash para acessar variáveis de ambiente, por exemplo.
Eu não sei gedit
, mas em vim
, você pode acessar variáveis de ambiente com uma sintaxe semelhante a shell:
:echo $HOME
por exemplo. O echo
aqui não tem nada a ver com echo
no shell, apenas funciona de maneira semelhante. Além disso, a string $HOME
é a maneira que o vim
expõe as variáveis de ambiente ao usuário.