Връщайки стойности от функции Баш, Linux Годен група

Връщайки стойности от функции Bash

Bash функции, за разлика от функции в повечето езици за програмиране не предоставят добра възможност да се върне резултат на изпълнение. Когато Баш-функция не успее, той връща състояние на завършеност: нула за успешно завършване на ненулевите - сигнализация проблеми. За да се върнете стойности, можете да зададете глобална променлива до оградата в нейните ценности, или да използвате замяната или предават стойности на локална променлива. Примерите по-долу показват как да използвате тези подходи.

Въпреки, че Баш връща код за излизане, което е от практическо значение? какво да правя с него? Върнатият код се съдържа в променливата $. Ако функцията по някаква причина не се връща код за излизане, този код ще бъде връщане кода на последната инструкция на функцията. По този начин необходимостта от трикове.

Най-лесният начин - да се създаде глобална променлива за съхраняване на резултата. От Баш всички променливи в световен мащаб по подразбиране, това е проста:

функция myfunc ()
myresult = 'някои стойност "
>

myfunc
ехо $ myresult

Този код определя глобалната променлива вътре myresult резултат функция. Доста проста, но както всички знаем, е установявал глобални променливи в големи програми може да предизвика trudnootlavlivaemyh бъгове.

Най-добра практика, ние приемаме, използването на местни променливи. Основният проблем да бъде преодолян, е как да се върне стойността на функцията за процеса на разговори. Един от начините - да използвате заместване на команда:

функция myfunc ()
местно myresult = 'някаква стойност "
ехо "$ myresult"
>

резултат = $ (myfunc) # или резултат = `myfunc`
ехо резултат $

резултат ще бъде тук в поток от стандартния изход и възможност да го вземете чрез замяна. ако е необходимо Освен променлива може да се използва.

Друг начин да се върне стойност - преминава в зависимост променлива име като параметър на командния ред и неговите рекордни резултати на функция:

функция myfunc ()
местно __resultvar = $ 1
местно myresult = 'някаква стойност "
Оценка $ __ resultvar = "" $ myresult "
>

myfunc резултат
ехо резултат $

Тъй като ние имаме някои името на променливата, която съхранява името на променливата от резултата, можем да определим изходяща променлива директно от командния ред. Необходимо е да се използват Оценка за присвояване на стойност.

Когато пазим името на променливата, подадена от командния ред, трябва да сте сигурни, че това име няма да бъдат използвани в процеса на разговори (така само в случай, че се използва тук __resultvar, не resultvar). Ако това се случи, променливата резултат не е зададен. Например, следния конструкцията няма да работи:

функция myfunc ()
местен резултат = $ 1
местно myresult = 'някаква стойност "
Оценка $ резултат = "" $ myresult "
>

myfunc резултат
ехо резултат $

Причината, поради която това не работи, е в особеностите на Оценка изявление. Когато Оценка изпълнява втората интерпретация, и изчислява резултата = 'някаква стойност ", е резултат от този момент - локална променлива и не излиза извън рамките на функция.

За по-голяма гъвкавост, можете да комбинирате и двата метода, както и прехвърлянето на параметъра име и заместване:

функция myfunc ()
местно __resultvar = $ 1
местно myresult = 'някаква стойност "
ако [[ "$ __ resultvar"]]; след това
Оценка $ __ resultvar = "" $ myresult "
още
ехо "$ myresult"
Fi
>

myfunc резултат
ехо резултат $
резултат2 = $ (myfunc)
ехо $ резултат2

Ако името не се предава на параметъра, върнатата стойност ще бъде издаден в stanartny на заключение.