Respostas:
$BASH
é uma variável local que é válida apenas no shell atual (bash).
Variáveis de ambiente como $SHELL
válidas em todo o sistema. Em um shell Bash atual, $BASH
aponta para o caminho de execução do bash , enquanto $SHELL
aponta para o shell definido como padrão (que pode ser do mesmo valor).
Para obter uma explicação das variáveis de ambiente, consulte Variáveis de ambiente na Ajuda do Ubuntu.
Uma variável de ambiente é uma disponível globalmente 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 variável de ambiente, use export VARNAME
(sem dólar $
).
Exemplos para 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
export
não define necessariamente uma variável de ambiente. stackoverflow.com/questions/7411455/…
export
define uma variável de ambiente para processos filhos. A postagem que você vinculou não contradiz esta resposta. Você poderia esclarecer por que acha que está errada?
export
absolutamente definir uma variável de ambiente
Há uma diferença. Variáveis de Shell e Variáveis de Ambiente explicarão melhor do que eu posso, mas aqui está um trecho:
Se uma alteração for feita em uma variável do shell, ela deverá ser explicitamente "exportada" para a variável de ambiente correspondente para que qualquer subprocesso bifurcado veja a alteração. Lembre-se de que as variáveis do shell são locais no shell em que foram definidas.
Variável do shell: curto prazo, aplicada apenas à instância atual do shell, não aplicável em todo o sistema
Variável ambiental: uso a longo prazo, sistema válido em todo o mundo, permitido globalmente
Por convenção, Shell Variable tem seu nome em minúsculas enquanto Envn. Variáveis são escritas como maiúsculas
Para responder a essa pergunta, primeiro tente entender o escopo de uma variável.
Quando você cria uma nova variável como a SOME_ENV_VARIABLE="testing.txt"
que reside em SHELL scope
, isso significa que ela pode ser acessada pela instância do shell em que o usuário está logado. Quando a instância muda, por exemplo, você abre um novo terminal ou o shell (por exemplo, você mudar para csh
) você não pode acessar essa variável.
Quando você exporta essa variável como export SOME_ENV_VARIABLE
essa variável agora está disponível no escopo do ambiente, isso significa que, se você alterar o shell, ainda poderá acessar essa 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: suponha que você tenha um apartamento de dois quartos e o compartilhe com outro colega de quarto. A área comum pode ser acessada por qualquer pessoa, exceto seus quartos, a variável de ambiente é como a área comum e a variável shell é como o quarto. Se você quiser algo na área comum, ele pode ser acessado por qualquer pessoa, mas se você a mantiver no quarto, ela poderá ser acessado por você.
Lembre-se, se abrir um novo terminal, você não poderá acessar nenhuma das variáveis porque está alterando essa instância . Para isso, você deve adicionar suas variáveis em um .profile
ou .bashrc
(se estiver usando o bash).