Как вернуть данные из подпрограммы сценария bash? - PullRequest
2 голосов
/ 15 марта 2012

Имеются следующие два исполняемых скрипта:

----- file1.sh

#!/bin/sh
. file2.sh
some_routine data

----- file2.sh

#!/bin/sh
some_routine()
{
    #get the data passed in
    localVar=$1
}

Я могу передать «данные» подпрограмме в другом скрипте, но я также хотел бы вернуть данные.

Можно ли вернуть информацию из some_routine?

e.g: var = some_routine data

Ответы [ 3 ]

8 голосов
/ 15 марта 2012

Попросите что-нибудь из подпрограммы, а затем используйте $() для захвата вывода:

some_routine() {
    echo "foo $1"
}

some_var=$(some_routine bar)
0 голосов
/ 15 марта 2012

если

some_routine() {
    echo "first"
    echo "foo $1"
}

some_var=$(some_routine "second")
echo "result: $some_var"

, то все в порядке. Но результат, кажется, определяется первым "эхо". Другой способ - использовать "eval".some_var возвращает «first»

some_routine()
{
        echo "cmj"
        eval $2=$1
}

some_routine "second" some_var
echo "result: $some_var"

таким образом, some_var возвращает «second». bash не возвращает строку напрямую. Так что нам нужны некоторые хитрости.

0 голосов
/ 15 марта 2012

Это не разрешено, просто установите значение глобальной переменной (все переменные в bash являются глобальными)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...