LinuxLudus: bash e funzioni

Federico Ramponi federico.ramponi@gmail.com
Ven 21 Set 2007 21:40:37 CEST


> Ricordo che le variabili presenti in una funzione sono private e
> quindi esistono solo al suo interno e non importa se hanno il nome di
> altre variabili usate nello script (cioč al di fuori della funzione).
>
Questo e` vero praticamente in tutti i linguaggi di programmazione, ma
non in bash (almeno, non per default). Per esempio

$ function setvar() { var1="pippo"; }
$ setvar
$ echo $var1
pippo

Sarebbe a dire: var1, anche dall'interno della funzione, e` per
default globale (quindi: occhio ai nomi delle variabili all'interno
delle funzioni perche' potresti sovrascrivere qualcosa all'esterno).
Se vuoi che una variabile sia locale ("privata") devi dichiararlo
esplicitamente:

$ function setvar() { local var1="pippo"; var2="pluto"}
$ setvar
$ echo $var1  # non e` visibile, quindi non stampa niente
$ echo $var2
pluto

Il discorso e` diverso per $@, $#, $1, $2, etc., che sono variabili
"speciali" il cui significato dipende dal contesto, come si vede
chiaramente dal tuo script.

ciao,
r.


Maggiori informazioni sulla lista linuxludus