it-swarm-es.tech

Diferencia entre "a = b" y "exportar a = b" en bash

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.

57
Adam Matan

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

59
Mike McQuaid

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.

29
wfaulk

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.

3
alok

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.

2
jlliagre