Supongo que viene de un fondo de Windows. Así que los contrastaré (yo también soy un poco nuevo en Linux). Encontré la respuesta del usuario a mi comentario, útil para resolver las cosas.
En Windows, una variable puede ser permanente o no. El término variable de entorno incluye una variable establecida en el shell cmd con el comando SET, así como cuando la variable se establece dentro de la GUI de Windows, por lo que se establece en el registro y se vuelve visible en nuevas ventanas cmd. por ejemplo, documentación para el comando set en Windows https://technet.microsoft.com/en-us/library/bb490998.aspx "Muestra, establece o elimina variables de entorno. Si se utiliza sin parámetros, set muestra la configuración actual del entorno". En Linux, set no muestra variables de entorno, muestra variables de shell a las que no llama / se refiere como variables de entorno. Además, Linux no usa set para establecer variables (aparte de los parámetros posicionales y las opciones de shell, que explico como una nota al final), solo para mostrarlas e incluso entonces solo para mostrar variables de shell. Windows usa set para configurar y mostrar, por ejemplo, set a = 5, linux no.
En Linux, supongo que se podría hacer un script que los conjuntos de variables en el arranque, por ejemplo, /etc/profile
o /etc/.bashrc
pero por lo demás, no son permanentes. Están almacenados en RAM.
En Linux, existe una distinción entre variables de shell y variables de entorno. En Linux, las variables de shell están solo en el shell actual y las variables de entorno están en ese shell y en todos los shells secundarios.
Puede ver las variables de shell con el set
comando (aunque tenga en cuenta que, a diferencia de Windows, las variables no se configuran en Linux con el comando set).
set -o posix; set
(hacer ese set -o posix una vez primero, ayuda a no mostrar demasiadas cosas innecesarias). Entonces set
muestra variables de shell.
Puede ver las variables de entorno con el env
comando
las variables de shell se establecen con, por ejemplo, solo a = 5
las variables de entorno se establecen con la exportación, la exportación también establece la variable de shell
Aquí puede ver la variable de shell zzz configurada con zzz = 5, y verá que se muestra cuando se ejecuta set
pero no se muestra como una variable de entorno.
Aquí vemos yyy configurado con export, por lo que es una variable de entorno. Y vea que se muestra tanto en variables de shell como en variables de entorno
$ zzz=5
$ set | grep zzz
zzz=5
$ env | grep zzz
$ export yyy=5
$ set | grep yyy
yyy=5
$ env | grep yyy
yyy=5
$
otros hilos útiles
/unix/176001/how-can-i-list-all-shell-variables
/ubuntu/26318/environment-variable-vs-shell-variable-whats-the-difference
Nota: un punto que se elabora un poco y es algo correctivo de lo que he escrito, es que, en linux bash, 'set' se puede usar para establecer "parámetros posicionales" y "opciones / atributos de shell", y técnicamente ambos esas son variables, aunque es posible que las páginas de manual no las describan como tales. Pero aún así, como se mencionó, set no establecerá variables de shell o variables de entorno). Si lo hace set asdf
, establece $ 1 en asdf, y si lo hace echo $1
, ve asdf. Si lo hacesset a=5
no establecerá la variable a, igual a 5. Establecerá el parámetro posicional $ 1 igual a la cadena de "a = 5". Entonces, si alguna vez vio el conjunto a = 5 en Linux, probablemente sea un error a menos que alguien realmente quiera esa cadena a = 5, en $ 1. La otra cosa que puede establecer el conjunto de Linux son las opciones / atributos de shell. Si establece -o, verá una lista de ellos. Y puede hacer, por ejemplo set -o verbose
, off, para activar verbose (por cierto, el valor predeterminado está desactivado, pero eso no hace ninguna diferencia). O puede hacer set +o verbose
para desactivar verbose. Windows no tiene tal uso para su comando set.