Visszatérve értékek funkciók bash, Linux exp-csoport

Visszatérve értékek funkciók Bash

Bash funkciókat, szemben a funkciók a legtöbb programozási nyelvben nem adnak egyértelmű lehetőséget, hogy visszatérjen a végrehajtás eredménye. Amikor Bash-függvény nem ad vissza állapotát befejezés: nulla sikeres nullától - jelző problémák. Ahhoz, hogy a visszatérési értékek, akkor meg egy globális változó a kerítés az ő értékeit, vagy használja a helyettesítés vagy át egy értéket egy helyi változót. Az alábbi példák azt mutatják, hogyan kell használni ezeket a megközelítéseket.

Bár Bash vissza kilépési kódot, amely a gyakorlati jelentősége? mit kell csinálni vele? Visszatérési kód tartalmazza a változó $. Ha a függvény valamilyen okból nem tér vissza kilépési kódot, ez a kód lesz a visszatérési kódot az utolsó utasításnak a funkciót. Így szükség van trükköket.

A legegyszerűbb módja - beállíthatjuk, hogy a globális változó tárolja az eredményt. Mivel Bash valamennyi változó globális alapértelmezés szerint ez egyszerű:

myfunc függvény ()
myresult = „valamilyen érték”
>

myfunc
echo $ myresult

Ez a kód állítja a globális változó belső myresult eredmény függvényében. Elég egyszerű, de mint tudjuk, a globális változók beállítása nagy programok is okozhat trudnootlavlivaemyh hibákat.

Legjobb gyakorlat, feltesszük a használata a lokális változók. A fő probléma megoldására, hogy hogyan tér vissza a függvény értéke a hívó folyamatot. Az egyik módja - a parancsról eltéréssel:

myfunc függvény ()
helyi myresult = „valamilyen érték”
echo "$ myresult"
>

result = $ (myfunc) # vagy eredmény = `myfunc`
echo $ result

eredmény lesz itt egy patak a szabványos kimenet és egy lehetőséget, hogy fogd meg a cserét. További változó használható, ha szükséges.

Egy másik módja, hogy visszatérjen érték - át a Függvényváltozó nevét, mint egy parancssori paraméter és annak eredménye következtében egy funkciót:

myfunc függvény ()
helyi __resultvar = $ 1
helyi myresult = „valamilyen érték”
eval $ __ resultvar = "'$ myresult"
>

myfunc eredmény
echo $ result

Mivel van néhány változó nevét, amely tárolja a változó nevét azzal az eredménnyel, akkor határozza meg a kimeneti változó közvetlenül a parancssorból. Meg kell használni eval értéket rendelni.

Amikor betartjuk a változó nevét át a parancssorból, akkor biztos, hogy ezt a nevet nem használják a hívó folyamat (tehát csak abban az esetben használom itt __resultvar nem resultvar). Ha ez nem történik meg, az eredmény változó nincs beállítva. Például a következő konstrukció nem fog működni:

myfunc függvény ()
helyi result = $ 1
helyi myresult = „valamilyen érték”
eval $ result = "" $ myresult"
>

myfunc eredmény
echo $ result

Ennek az az oka, hogy ez nem működik, az a sajátossága eval nyilatkozatot. Amikor eval végrehajtja a második értelmezés és kiszámítja az eredményt = „bizonyos érték”, ered ez a pillanat - egy helyi változó, és nem léphetik túl a funkciót.

A nagyobb rugalmasság, akkor mindkét módszer, és az átruházás a név paraméter, és a helyettesítés:

myfunc függvény ()
helyi __resultvar = $ 1
helyi myresult = „valamilyen érték”
if [[ "$ __ resultvar"]]; majd
eval $ __ resultvar = "'$ myresult"
más
echo "$ myresult"
fi
>

myfunc eredmény
echo $ result
result2 = $ (myfunc)
echo $ result2

Ha a név nem adja át a paramétert, akkor a visszatérési érték kerül ki a következtetést stanartny.