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).