Variáveis do shell
Variáveis de shell são variáveis cujo escopo está na sessão de shell atual, por exemplo, em uma sessão de shell interativa ou em um script.
Você pode criar uma variável de shell atribuindo um valor a um nome não utilizado:
var="hello"
O uso de variáveis do shell é acompanhar os dados na sessão atual. As variáveis do shell geralmente têm nomes com letras minúsculas.
Variáveis ambientais
Uma variável de ambiente é uma variável de shell que foi exportada. Isso significa que ficará visível como uma variável, não apenas na sessão do shell que a criou, mas também para qualquer processo (não apenas shells) iniciado a partir dessa sessão.
VAR="hello" # shell variable created
export VAR # variable now part of the environment
ou
export VAR="hello"
Depois que uma variável do shell é exportada, ela permanece exportada até que seja desmarcada ou até que sua "propriedade de exportação" seja removida (com export -n
in bash
), portanto, geralmente não há necessidade de reexportá-la. Desativar uma variável com a unset
exclui (não importa se é uma variável de ambiente ou não).
Matrizes e hashes associativos bash
e outros shells não podem ser exportados para se tornarem variáveis de ambiente. As variáveis de ambiente devem ser variáveis simples cujos valores são cadeias de caracteres e geralmente têm nomes que consistem em letras maiúsculas.
O uso de variáveis de ambiente é acompanhar os dados na sessão atual do shell, mas também permitir que qualquer processo iniciado faça parte desses dados. O caso típico disso é a PATH
variável de ambiente, que pode ser definida no shell e usada posteriormente por qualquer programa que queira iniciar programas sem especificar um caminho completo para eles.
A coleta de variáveis de ambiente em um processo é frequentemente chamada de "o ambiente do processo". Cada processo tem seu próprio ambiente.
As variáveis de ambiente só podem ser "encaminhadas", ou seja, um processo filho nunca pode alterar as variáveis de ambiente em seu processo pai e, além de configurar o ambiente para um processo filho ao iniciá-lo, um processo pai não pode alterar o ambiente existente de um processo filho.
As variáveis de ambiente podem ser listadas com env
(sem argumentos). Fora isso, eles aparecem da mesma forma que variáveis de shell não exportadas em uma sessão de shell. Isso é um pouco especial para o shell, já que a maioria das outras linguagens de programação não costuma misturar variáveis "comuns" com variáveis de ambiente (veja abaixo).
env
também pode ser usado para definir os valores de uma ou várias variáveis de ambiente no ambiente de um processo sem configurá-los na sessão atual:
env CC=clang CXX=clang++ make
Isso começa make
com a variável de ambiente CC
definida como o valor clang
e CXX
definida como clang++
.
Também pode ser usado para limpar o ambiente de um processo:
env -i bash
Isso inicia, bash
mas não transfere o ambiente atual para o novo bash
processo (ele ainda terá variáveis de ambiente à medida que cria novas a partir de seus scripts de inicialização do shell).
Exemplo de diferença
$ var="hello" # create shell variable "var"
$ bash # start _new_ bash session
$ echo "$var" # no output
$ exit # back to original shell session
$ echo "$var" # "hello" is outputted
$ unset var # remove variable
$ export VAR="hello" # create environment variable "VAR"
$ bash
$ echo "$VAR" # "hello" is outputted since it's exported
$ exit # back to original shell session
$ unset VAR # remove variable
$ ( export VAR="hello"; echo "$VAR" ) # set env. var "VAR" to "hello" in subshell and echo it
$ echo "$VAR" # no output since a subshell has its own environment
Outras línguas
Existem funções de biblioteca na maioria das linguagens de programação que permitem obter e configurar as variáveis de ambiente. Observe que, como as variáveis de ambiente são armazenadas como um relacionamento simples de valor-chave, elas geralmente não são "variáveis" do idioma. Um programa pode buscar o valor (que é sempre uma cadeia de caracteres) correspondente a uma chave (o nome da variável de ambiente), mas precisará convertê-lo em um número inteiro ou em qualquer tipo de dados que o idioma espere que o valor tenha.
Em C, variáveis de ambiente pode ser acedido utilizando getenv()
, setenv()
, putenv()
e unsetenv()
. As variáveis criadas com essas rotinas são herdadas da mesma maneira por qualquer processo iniciado pelo programa C.
Outros idiomas podem ter estruturas de dados especiais para realizar a mesma coisa, como o %ENV
hash no Perl ou o ENVIRON
array associativo na maioria das implementações do awk
.