Lokale variabelen
In de scripts die we tot nu toe hebben geschreven, zijn alle variabelen (inclusief constanten) geweest globale variabelen. Globale variabelen blijven gedurende het hele programma bestaan. Dit is prima voor veel dingen, maar het kan soms het gebruik van shell-functies bemoeilijken. Inside shell-functies zijn vaak wenselijk om te hebben lokale variabelen. Lokale variabelen zijn alleen toegankelijk binnen de shell-functie waarin ze zijn gedefinieerd en houden op te bestaan zodra de shell-functie eindigt.
Het hebben van lokale variabelen stelt de programmeur in staat variabelen te gebruiken met namen die mogelijk al bestaan, hetzij in het script globaal of in andere shell-functies, zonder zich zorgen te hoeven maken over mogelijke naamconflicten.
Hier is een voorbeeldscript dat laat zien hoe lokale variabelen worden gedefinieerd en gebruikt:
#! / Bin / bash
# local-vars: script om lokale variabelen te demonstreren
#! / Bin / bash
# local-vars: script om lokale variabelen te demonstreren
foe=0
# globale variabele foo
foe=0
functie_1 () {
local foo # variabele foo local naar funct_1 foo=1
echo "funct_1: foo = $foo"
}
functie_2 () {
local foo # variabele foo local naar funct_2 foo=2
echo "funct_2: foo = $foo"
}
echo "algemeen: foo = $foo" funct_1
functie_1 () {
local foo # variabele foo local naar funct_1 foo=1
echo "funct_1: foo = $foo"
}
functie_2 () {
local foo # variabele foo local naar funct_2 foo=2
echo "funct_2: foo = $foo"
}
echo "algemeen: foo = $foo" funct_1
Lokale variabelen
echo "algemeen: foo = $foo" funct_2
echo "algemeen: foo = $foo"
echo "algemeen: foo = $foo" funct_2
echo "algemeen: foo = $foo"
Zoals we kunnen zien, worden lokale variabelen gedefinieerd door de naam van de variabele vooraf te laten gaan door het woord lokaal. Dit creëert een variabele die lokaal is voor de shell-functie waarin deze is gedefinieerd. Eenmaal buiten de shell-functie bestaat de variabele niet meer. Wanneer we dit script uitvoeren, zien we de resultaten:
[ik@linuxbox ~]$ lokale-vars
globaal: foo = 0 funct_1: foo = 1 globaal: foo = 0 funct_2: foo = 2 globaal: foo = 0
[ik@linuxbox ~]$ lokale-vars
globaal: foo = 0 funct_1: foo = 1 globaal: foo = 0 funct_2: foo = 2 globaal: foo = 0
We zien dat de toewijzing van waarden aan de lokale variabele foo binnen beide shell-functies heeft geen effect op de waarde van foo gedefinieerd buiten de functies.
Met deze functie kunnen shell-functies zo worden geschreven dat ze onafhankelijk blijven van elkaar en van het script waarin ze voorkomen. Dit is erg waardevol, omdat het helpt voorkomen dat een onderdeel van een programma een ander onderdeel verstoort. Het maakt het ook mogelijk om shell-functies te schrijven zodat ze draagbaar kunnen zijn. Dat wil zeggen, ze kunnen naar behoefte van script naar script worden geknipt en geplakt.