Variabili della shell e variabili di ambiente
MY_HOME="/home/my_user"
imposta la variabile shell chiamata MY_HOME
. Le shell sono linguaggi di programmazione e hanno variabili (chiamate anche parametri). Dopo questa assegnazione, è possibile utilizzare il valore della variabile, ad es echo "$MY_HOME"
. Con .
Le variabili di shell sono un concetto di shell interno. Quando termina l'istanza della shell, MY_HOME
viene dimenticata. Ciò che ogni programma conosce e trasmette ai propri figli sono le variabili di ambiente .
All'interno della shell, le variabili di ambiente e le variabili di shell funzionano in modo molto simile. Ciò che realmente accade è che tutte le variabili di ambiente che la shell eredita dal suo genitore diventano variabili di shell. Al contrario, una variabile di shell definita in uno script di shell diventerà una variabile di ambiente se la si esporta .
export MY_HOME="/home/my_user"
Maggiori dettagli puoi saltare in prima lettura
Il motivo per cui le variabili di shell non diventano automaticamente variabili di ambiente è in parte il fatto che uno script potrebbe usare accidentalmente un nome di variabile significativo per un programma che avvia e in parte solo storico.
È necessario export
utilizzare alcune shell molto vecchie ogni volta che si modifica un nome di variabile, ma tutte le shell moderne tengono traccia delle assegnazioni per le variabili di ambiente, in modo che il seguente frammento echi bar
:
myvar=foo
export myvar
myvar=bar
env | grep '^myvar='
Inoltre, alcune shell molto vecchie richiedono comandi separati per myvar=foo
e export myvar
, ma tutte le shell moderne comprendono export myvar=foo
.
È possibile eseguire set -a
per fare in modo che tutte le assegnazioni delle variabili della shell esportino automaticamente la variabile, quindi ciò myvar=foo
equivale a export myvar=foo
se si eseguiva set -a
prima quella shell.
Su preventivo
La citazione è per lo più ortogonale. Se il valore che stai assegnando alla variabile non contiene caratteri speciali per la shell, non hai bisogno di virgolette. Se sono presenti caratteri speciali, è necessario proteggerli con virgolette singole o doppie virgolette o barre rovesciate o una loro combinazione. Questo vale sia per la myvar=value
sintassi normale che per l' export
utilità.
C'è una differenza tra la sintassi dell'assegnazione e la export
sintassi. La shell espande ulteriormente i risultati delle sostituzioni variabili $foo
, eseguendo la suddivisione del campo (parola) e l' espansione del percorso (globbing) . Ciò significa che se il valore di myvar
è hello *
, quindi echo $myvar
stampa hello
seguita da un singolo spazio seguito dall'elenco dei file nella directory corrente. Questo non è quasi mai auspicabile, da qui il principio generale per usare sempre le virgolette intorno sostituzioni variabili (a meno che non si sa che avete bisogno di Espansione di percorso o campo di spezzamento): echo "$myvar"
. Nel caso di una semplice cessione, othervar=$myvar
infatti, copia in modo affidabile il valore di myvar
aothervar
, poiché il globbing e la divisione delle parole sono inibiti nelle assegnazioni (perché creano più parole, ma è prevista una sola parola). Questa dispensa non si applica export
, tuttavia. Quindi, se vuoi ricordare una semplice regola, usa sempre virgolette doppie attorno alle sostituzioni variabili.