Qual è la differenza tra:
a=b
e
export a=b
In bash?
Capisco che entrambi definiscono le variabili di ambiente, ma non capisco appieno la differenza.
Qual è la differenza tra:
a=b
e
export a=b
In bash?
Capisco che entrambi definiscono le variabili di ambiente, ma non capisco appieno la differenza.
Risposte:
export
propaga la variabile in sottoprocessi.
Ad esempio, se l'hai fatto
FOO=bar
quindi un sottoprocesso che controlla FOO non trova la variabile mentre
export FOO=bar
consentirebbe al sottoprocesso di trovarlo.
Ma se FOO
ha già stato definito come una variabile di ambiente, quindi FOO=bar
modificherà il valore di tale variabile d'ambiente.
Per esempio:
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"
Le shell meno recenti non supportavano il export FOO=bar
sintassi; dovevi scrivere FOO=bar; export FOO
.
export
", non stai definendo una variabile di ambiente, ma solo una variabile di shell Le variabili di shell sono disponibili solo per il processo shell, le variabili di ambiente sono disponibili per qualunque processo successivo, non solo shell. Inoltre, le subshell sono comandi racchiusi tra parentesi, che hanno accesso alle variabili di shell, mentre ciò di cui si sta parlando sono i processi figli che sono shell.
Inoltre, se vuoi che la variabile sia disponibile alla shell chiamante senza usare l'esportazione, puoi farlo:
Il file a.ksh è -
#!/bin/ksh
FOO=bar
Al prompt, eseguire questo è
> . a.ksh
Questo eseguirà i comandi all'interno della stessa shell e $ FOO sarà disponibile.
Mentre,
> a.ksh
Renderà $ FOO disponibile solo all'interno di a.ksh, dopo la chiamata a a.ksh non esisterebbe.
Oltre a ciò che è già stato risposto, entrambe queste istruzioni non definiscono necessariamente (cioè crea vs set) una variabile di ambiente come "a" potrebbe già esistere come shell o variabile di ambiente.
In quest'ultimo caso, entrambe le affermazioni sono strettamente equivalenti.