Variável de ambiente vs variável Shell, qual a diferença?

42

Alguém me disse isso:

  

BASH não é uma variável de ambiente   é uma variável de shell

Qual é a diferença?

    
por Tom Brito 14.02.2011 / 14:08

5 respostas

28

$BASH é uma variável local válida apenas no shell atual (bash).

Variáveis de ambiente como $SHELL são válidas em todo o sistema. Em um shell Bash atual, $BASH aponta para o caminho de execução de bash , enquanto $SHELL aponta para o shell definido como padrão (que pode ter o mesmo valor).

Para uma explicação das variáveis de ambiente, veja Variáveis de Ambiente na Ajuda do Ubuntu.

    
por Takkat 14.02.2011 / 14:29
34

Uma variável de ambiente é globalmente disponível, em um programa e em programas filhos. Uma variável de shell está disponível apenas no shell atual. Para disponibilizar uma variável de shell como uma variável de ambiente, use export VARNAME (sem dólar $ ).

Exemplos de esclarecimento:

$ SOME=VAR # define shell variable $SOME
$ echo $SOME
VAR
$ env | grep SOME # note: no output
$ export SOME # turn $SOME into an environment variable
$ env | grep SOME
SOME=VAR

Outra maneira de definir uma variável de ambiente:

$ export ANOTHER=VALUE
$ echo $ANOTHER
VALUE
$ env | grep ANOTHER
ANOTHER=VALUE
    
por Lekensteyn 14.02.2011 / 14:19
7

Existe uma diferença. Variáveis e variáveis de ambiente da Shell explicarão melhor que eu posso, mas aqui está um trecho dele :

  

Se uma alteração for feita em uma variável shell, ela deverá ser explicitamente "exportada" para a variável de ambiente correspondente para que qualquer subprocesso bifurcado possa ver a alteração. Lembre-se de que as variáveis do shell são locais para o shell no qual elas foram definidas.

    
por Peter.O 14.02.2011 / 14:23
2

Variável da Shell: Curto Prazo, Aplicado apenas à instância atual da shell, Não aplicável ao sistema

Variável Ambiental: Uso a Longo Prazo, Válido em Todo o Sistema, Permitido Globalmente

Por convenção, a variável Shell tem seu nome em minúsculas enquanto Envn. As variáveis são escritas em maiúsculas

    
por Ashish 06.07.2016 / 22:39
0

Para responder a essa pergunta, primeiro tente entender o escopo de uma variável.

Quando você cria uma nova variável como SOME_ENV_VARIABLE="testing.txt" ela reside no SHELL scope , isso significa que ela pode ser acessada por essa instância do shell onde o usuário está logado. Quando a instância é alterada por exemplo, você abre um novo terminal ou altera o shell (por exemplo, você alterna para csh ) você não pode acessar essa variável.

Quando você exporta essa variável como export SOME_ENV_VARIABLE , essa variável está agora disponível no escopo do ambiente, isso significa que essa instância se você alterar o shell poderá ainda acessar esse variável. Vamos tentar entender com o seguinte exemplo:

[vishrant@localhost]$ SOME_ENV_VARIABLE="testing.txt" #creating variable in bash shell
[vishrant@localhost]$ echo $SOME_ENV_VARIABLE
testing.txt
[vishrant@localhost]$ export SOME_ENV_VARIABLE #variable now available with environment
[vishrant@localhost]$ env | grep SOME_ENV_VARIABLE
SOME_ENV_VARIABLE=testing.txt
[vishrant@localhost]$ csh #changing shell
[vishrant@localhost ~/shell_scripting]$ echo $SOME_ENV_VARIABLE
testing.txt
[vishrant@localhost ~/shell_scripting]$ exit
exit #returned to parent shell
[vishrant@localhost]$ SOME_SHELL_VARIABLE="hello.txt"
[vishrant@localhost]$ csh
[vishrant@localhost ~/shell_scripting]$ echo $SOME_SHELL_VARIABLE
SOME_SHELL_VARIABLE: Undefined variable.

Analogia: vamos supor que você tenha um apartamento de dois quartos e esteja compartilhando com outro colega de quarto. A área comum pode ser acessada por qualquer pessoa, mas não pelos seus dormitórios, a variável ambiente é como área comum e a variável shell é como um quarto, se você quiser algo em comum pode ser acessado por qualquer pessoa, mas se você a guardar ser acessado por você.

Lembre-se de abrir um novo terminal e não poderá acessar nenhuma das variáveis porque está mudando essa instância . Para isso, você deve adicionar suas variáveis em .profile ou .bashrc (se você estiver usando o bash).

    
por Vishrant 23.12.2017 / 20:21