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.