<Precedenti | Contenuti | Succ.>
Variabili locali
Negli script che abbiamo scritto finora, tutte le variabili (incluse le costanti) sono state variabili globaliLe variabili globali mantengono la loro esistenza per tutto il programma. Questo è utile per molte cose, ma a volte può complicare l'uso delle funzioni shell. All'interno delle funzioni shell, è spesso auspicabile avere variabili localiLe variabili locali sono accessibili solo all'interno della funzione shell in cui sono definite e cessano di esistere una volta terminata la funzione shell.
Avere variabili locali consente al programmatore di utilizzare variabili con nomi che potrebbero già esistere, sia nello script a livello globale che in altre funzioni shell, senza doversi preoccupare di potenziali conflitti di nomi.
Ecco uno script di esempio che dimostra come vengono definite e utilizzate le variabili locali:
#! / Bin / bash
# local-vars: script per dimostrare le variabili locali
#! / Bin / bash
# local-vars: script per dimostrare le variabili locali
pippo=0
# variabile globale foo
pippo=0
funzione_1 () {
foo locale # variabile foo locale a funct_1 foo=1
echo "funct_1: foo = $foo"
}
funzione_2 () {
foo locale # variabile foo locale a funct_2 foo=2
echo "funct_2: foo = $foo"
}
echo "globale: foo = $foo" funct_1
funzione_1 () {
foo locale # variabile foo locale a funct_1 foo=1
echo "funct_1: foo = $foo"
}
funzione_2 () {
foo locale # variabile foo locale a funct_2 foo=2
echo "funct_2: foo = $foo"
}
echo "globale: foo = $foo" funct_1
Variabili locali
echo "globale: foo = $foo" funct_2
echo "globale: foo = $foo"
echo "globale: foo = $foo" funct_2
echo "globale: foo = $foo"
Come possiamo vedere, le variabili locali sono definite anteponendo al nome della variabile la parola localeQuesto crea una variabile locale alla funzione shell in cui è definita. Una volta fuori dalla funzione shell, la variabile non esiste più. Quando eseguiamo questo script, vediamo i risultati:
[io@linuxbox~]$ variabili locali
globale: foo = 0 funct_1: foo = 1 globale: foo = 0 funct_2: foo = 2 globale: foo = 0
[io@linuxbox~]$ variabili locali
globale: foo = 0 funct_1: foo = 1 globale: foo = 0 funct_2: foo = 2 globale: foo = 0
Vediamo che l'assegnazione dei valori alla variabile locale foo all'interno di entrambe le funzioni shell non ha alcun effetto sul valore di foo definiti al di fuori delle funzioni.
Questa funzionalità consente di scrivere funzioni shell in modo che rimangano indipendenti l'una dall'altra e dallo script in cui compaiono. Questo è molto prezioso, poiché aiuta a impedire che una parte di un programma interferisca con un'altra. Permette inoltre di scrivere funzioni shell in modo che siano portabili. Vale a dire, possono essere tagliate e incollate da uno script all'altro, a seconda delle necessità.