Bash parece diferenciar entre las variables que se han exportado y las que no.
ejemplo:
$ FOO=BAR
$ env | grep FOO
$ set | grep FOO
FOO=BAR
set
ve la variable pero env
no la ve.
$ export BAR=FOO
$ env | grep FOO
BAR=FOO
$ set | grep FOO
BAR=FOO
FOO=BAR
set
ve ambas variables pero env
solo ve la variable exportada.
Sé que set
es un bash incorporado y env
no lo es.
¿Cuáles son las diferencias entre las variables que se exportan y las que no?
shell
environment-variables
lesmana
fuente
fuente
Respuestas:
Las variables exportadas se llevan al entorno de los comandos ejecutados por el shell que las exportó, mientras que las variables no exportadas son locales a la invocación actual del shell. Desde la
export
página del manual:set
genera el entorno actual, que incluye cualquier variable local no exportada.env
se utiliza para iniciar programas en un nuevo entorno, y sin argumentos generará cuál sería ese nuevo entorno. Dado queenv
está creando un nuevo entorno, solo se traen las variables exportadas, como es el caso de cualquier programa lanzado desde ese shell. Por ejemplo, engendrando un segundo shell dentro del primero (solía$$
representar mensajes en el shell interno):Tenga en cuenta que se exporta la variable, no solo su valor. Esto significa que una vez que
export FOO
,FOO
se convierte en una variable global y se muestra en entornos posteriores, aunque más tarde cambió:fuente
locale
por qué el shell actual no muestra las actualizaciones?