OnWorks Linux i Windows Online WorkStation

logo

Darmowy hosting online dla stacji roboczych

<Poprzedni | Spis treści | Następne>

Zmienne lokalne

W skryptach, które do tej pory napisaliśmy, wszystkie zmienne (w tym stałe) zostały: zmienne globalne. Zmienne globalne zachowują swoje istnienie w całym programie. Jest to dobre dla wielu rzeczy, ale czasami może komplikować użycie funkcji powłoki. Wewnątrz powłoki często pożądane jest posiadanie zmienne lokalne. Zmienne lokalne są dostępne tylko w funkcji powłoki, w której są zdefiniowane, i przestają istnieć po zakończeniu działania funkcji powłoki.

Posiadanie zmiennych lokalnych pozwala programiście na używanie zmiennych o nazwach, które mogą już istnieć, albo w skrypcie globalnie, albo w innych funkcjach powłoki, bez martwienia się o potencjalne konflikty nazw.

obraz

Oto przykładowy skrypt, który demonstruje sposób definiowania i używania zmiennych lokalnych:


#! / bin / bash


# local-vars: skrypt demonstrujący lokalne zmienne

#! / bin / bash


# local-vars: skrypt demonstrujący lokalne zmienne


foo=0

# globalna zmienna foo

foo=0


funkcja_1 () {

lokalna foo # zmienna foo lokalna na funct_1 foo=1

echo "funct_1: foo = $foo"

}


funkcja_2 () {

lokalna foo # zmienna foo lokalna na funct_2 foo=2

echo "funct_2: foo = $foo"

}


echo "global: foo = $foo" funct_1

funkcja_1 () {

lokalna foo # zmienna foo lokalna na funct_1 foo=1

echo "funct_1: foo = $foo"

}


funkcja_2 () {

lokalna foo # zmienna foo lokalna na funct_2 foo=2

echo "funct_2: foo = $foo"

}


echo "global: foo = $foo" funct_1

Zmienne lokalne


echo "global: foo = $foo" funct_2

echo "global: foo = $foo"

echo "global: foo = $foo" funct_2

echo "global: foo = $foo"


Jak widać, zmienne lokalne definiuje się przez poprzedzenie nazwy zmiennej słowem miejscowy. Tworzy to zmienną lokalną dla funkcji powłoki, w której jest zdefiniowana. Po wyjściu z funkcji powłoki zmienna już nie istnieje. Po uruchomieniu tego skryptu widzimy wyniki:



[ja@linuxbox ~]$ lokalne-wars

globalne: foo = 0 funct_1: foo = 1 globalne: foo = 0 funct_2: foo = 2 globalne: foo = 0

[ja@linuxbox ~]$ lokalne-wars

globalne: foo = 0 funct_1: foo = 1 globalne: foo = 0 funct_2: foo = 2 globalne: foo = 0


Widzimy, że przypisanie wartości do zmiennej lokalnej bla w obu funkcjach powłoki nie ma wpływu na wartość bla zdefiniowane poza funkcjami.

Ta cecha umożliwia pisanie funkcji powłoki tak, aby pozostawały niezależne od siebie i od skryptu, w którym się pojawiają. Jest to bardzo cenne, ponieważ pomaga zapobiegać ingerencji jednej części programu w inną. Pozwala także na pisanie funkcji powłoki tak, aby były przenośne. Oznacza to, że w razie potrzeby można je wycinać i wklejać ze skryptu do skryptu.


Najlepsze przetwarzanie w chmurze dla systemu operacyjnego w OnWorks: