Eu acho que você está vindo de um fundo de janela. Então, vou contrastá-los (também sou meio novo no Linux). Achei a resposta do usuário ao meu comentário útil para descobrir as coisas.
No Windows, uma variável pode ser permanente ou não. O termo variável de ambiente inclui uma variável definida no shell cmd com o comando SET, bem como quando a variável é definida na GUI do Windows, portanto definida no registro e tornando-se visível em novas janelas cmd. por exemplo, documentação para o comando set no Windows https://technet.microsoft.com/en-us/library/bb490998.aspx "Exibe, define ou remove variáveis de ambiente. Usado sem parâmetros, definir exibe as configurações de ambiente atuais." No Linux, set não exibe variáveis de ambiente, ele exibe variáveis de shell que ele não chama / se refere como variáveis de ambiente. Além disso, o Linux não usa set para definir variáveis (além de parâmetros posicionais e opções de shell, que explico como uma nota no final), apenas para exibi-los e mesmo assim apenas para exibir variáveis de shell. O Windows usa set para definir e exibir, por exemplo, set a = 5, o Linux não.
No Linux, acho que você poderia fazer um script que define variáveis na inicialização, por exemplo, /etc/profile
ou /etc/.bashrc
mas caso contrário, elas não são permanentes. Eles são armazenados na RAM.
Há uma distinção no Linux entre variáveis de shell e variáveis de ambiente. No Linux, as variáveis do shell estão apenas no shell atual, e as variáveis de ambiente estão naquele shell e em todos os shells filhos.
Você pode ver as variáveis do shell com o set
comando (embora observe que, ao contrário do Windows, as variáveis não são definidas no Linux com o comando set).
set -o posix; set
(fazer aquele set -o posix uma vez primeiro, ajuda a não exibir muitas coisas desnecessárias). Então set
exibe variáveis de shell.
Você pode ver as variáveis de ambiente com o env
comando
variáveis de shell são definidas com, por exemplo, apenas a = 5
as variáveis de ambiente são definidas com export, export também define a variável shell
Aqui, você vê a variável shell zzz definida com zzz = 5 e mostra quando está em execução, set
mas não como uma variável de ambiente.
Aqui vemos yyy definido com exportação, portanto, é uma variável de ambiente. E veja como é mostrado nas variáveis de shell e nas variáveis de ambiente
$ zzz=5
$ set | grep zzz
zzz=5
$ env | grep zzz
$ export yyy=5
$ set | grep yyy
yyy=5
$ env | grep yyy
yyy=5
$
outros tópicos úteis
/unix/176001/how-can-i-list-all-shell-variables
/ubuntu/26318/environment-variable-vs-shell-variable-whats-the-difference
Nota - um ponto que elabora um pouco e é um tanto corretivo ao que escrevi, é que, no bash do Linux, 'set' pode ser usado para definir "parâmetros posicionais" e "opções / atributos do shell" e, tecnicamente, ambos essas são variáveis, embora as páginas do manual não as descrevam como tal. Mas ainda, como mencionado, set não definirá variáveis de shell ou variáveis de ambiente). Se você fizer set asdf
isso, ele definirá $ 1 como asdf, e se você vir, echo $1
você verá asdf. Se você fizerset a=5
ele não definirá a variável a, igual a 5. Ele definirá o parâmetro posicional $ 1 igual à string de "a = 5". Então, se você já viu definir a = 5 no Linux, provavelmente é um erro, a menos que alguém realmente quisesse a string a = 5, em $ 1. A outra coisa que o conjunto do Linux pode definir são as opções / atributos do shell. Se você definir -o, verá uma lista deles. E você pode fazer, por exemplo set -o verbose
, desligar, para ativar o verbose (a propósito, o padrão é desativado, mas isso não faz diferença). Ou você pode fazer set +o verbose
para desligar o verbose. O Windows não tem esse uso para seu comando set.