Manipularea variabilelor dintr-o functie. Domeniul de vizibilitate al variabilelor
poate fi global sau local. Variabilele globale sunt valide oriunde în interiorul scriptului.
Deoarece pot exista conflicte la denumirea variabilelor (în mod normal variabilele folosite în
script sunt vizibile şi în funcŃii), putem folosi variabile care sunt vizibile doar în interiorul
funcŃiei, declarându-le cu local (sau în cazul vectorilor cu local -a).
Exemplu. Folosirea unei variabile globale pentru a transmite o valoare.
$cat >exfunc5
function dbl {
val=$[ $val * 2 ]
}
read -p "Introduceti o valoare: " val
dbl
echo "Noua valoare este: $val"
$ ./exfunc5
Introduceti o valoare: 450
Noua valoare este: 900
Variabila $val este definită şi asignată în afara funcŃiei. Când este apelată funcŃia
dbl, variabila şi valoarea ei sunt încă valide în interiorul funcŃiei.
ObservaŃie. Când variabilei îi este asignată o nouă valoare în interiorul funcŃiei, acea nouă
valoare este validă când script-ul referenŃiază variabila. Acest lucru poate fi periculos, în
special atunci când o funcŃie este utilizată în diferite script-uri.
Exemplu. Utilizarea proastă a variabilelor.
$cat > exfunc6
function func1() {
temp=$[ $val + 5 ]
rezultat=$[ $temp * 2 ]
}
temp=4;val=6;func1;
echo "Rezultatul este $rezultat "
if [ $temp -gt $val ]
then
echo "temp este mai mare"
else
echo "temp este mai mic"
fi
$./exfunc6
Rezultatul este 22
temp este mai mare
Se observă că mesajul afişat este greşit (4>6). Cauza este folosirea variabilei
$temp în cadrul funcŃiei.
Aceasta problemă este rezolvată prin folosirea variabilelor locale. Variabilele locale
pot fi specificate cu declaraŃia local, prezentată anterior. Această declaraŃie poate fi folosită
şi într-o comandă de asignare.
104
Exemplu.
local temp=$[ $val + 5 ]
Dacă o variabilă locală este utilizată în afara funcŃiei, shell-ul păstrează două valori
separate ale variabilei.
Exemplu:
$cat > exfunc7
function func1 {
local temp=$[ $val + 5 ]
rezultat=$[ $temp * 2 ]
}
temp=4;value=6;func1;echo"Rezultatul este $rezultat "
if [ $temp -gt $value ]
then
echo "temp este mai mare"
else
echo "temp este mai mic"
fi
$ ./exfunc7
Rezultatul este 22
temp este mai mic
Folosirea variabilei $temp în interiorul funcŃiei func1 nu afecteză valoarea
asignata variabilei $temp în script.
Dostları ilə paylaş: |