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_HOMEviene 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 exportutilizzare 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=fooe export myvar, ma tutte le shell moderne comprendono export myvar=foo.
È possibile eseguire set -aper fare in modo che tutte le assegnazioni delle variabili della shell esportino automaticamente la variabile, quindi ciò myvar=fooequivale a export myvar=foose si eseguiva set -aprima 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=valuesintassi normale che per l' exportutilità.
C'è una differenza tra la sintassi dell'assegnazione e la exportsintassi. 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 $myvarstampa helloseguita 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=$myvarinfatti, copia in modo affidabile il valore di myvaraothervar, 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.