Cuál es la diferencia entre:
a=b
y
export a=b
¿En bash?
Entiendo que ambos definen variables de entorno, pero no entiendo completamente la diferencia.
export
propaga la variable a los subprocesos.
Por ejemplo, si lo hiciste
FOO=bar
entonces un subproceso que verificara FOO no encontraría la variable mientras que
export FOO=bar
permitiría al subproceso encontrarlo.
Pero si FOO
ya se ha definido como una variable de entorno, entonces FOO=bar
modificará el valor de esa variable de entorno.
Por ejemplo:
FOO=one # Not an environment variable
export FOO # Now FOO is an environment variable
FOO=two # Update the environment variable, so sub processes will see $FOO = "two"
Los proyectiles más antiguos no eran compatibles con export FOO=bar
sintaxis; tenías que escribir FOO=bar; export FOO
.
Si no usa export
, no está definiendo una variable de entorno; solo una variable de Shell.
Las variables de Shell solo están disponibles para el proceso de Shell; las variables de entorno están disponibles para cualquier proceso posterior, no solo para shells.
Además, si desea tener la variable disponible para el Shell que llama sin usar la exportación, puede hacer esto:
El archivo a.ksh es -
#!/bin/ksh
FOO=bar
En el indicador, ejecute esto es
> . a.ksh
Esto ejecutará los comandos dentro del mismo Shell y $ FOO estará disponible.
Mientras,
> a.ksh
Hará que $ FOO esté disponible solo dentro de a.ksh, después de la llamada a a.ksh no existiría.
Además de lo que ya se ha respondido, ambas declaraciones no definen necesariamente (es decir, crear o establecer) una variable de entorno, ya que "a" ya podría existir como Shell o variable de entorno.
En el último caso, ambas declaraciones son estrictamente equivalentes.