удар - оператор возврата и оператор печати

У меня есть функция удара, которая возвращает число путем добавления 20 к нему. В то же время я хотел бы отобразиться для наблюдения то, что является входом.

function add_nos {
    echo "$1"
    echo $(($1 + 20))
    return 1
}

result=`add_nos $1`
echo $result

Когда я выполняю следующую команду -

bash setup.sh 10

Я получаю следующий вывод -

10 30

Как может я дифференцироваться между 2 stmts; т.е. 1-е эхо для отладки, и 2-е эхо для возвращаемого значения.

0
задан 12 March 2018 в 08:01

2 ответа

Возможно, распечатайте оператор отладки к стандартной погрешности вместо стандартного вывода?

echo "$1" >&2
3
ответ дан 30 October 2019 в 06:57

Вернуть

return значение хранится в $? после каждой команды/вызова функции. Попробуйте это для доступа к нему:

function add_nos {
    echo "$1"
    echo $(($1 + 20))
    return 1
}

result=`add_nos $1`
retval=$?  # this is the "return" value of "add_nos"
echo "result: $result"
echo "return: $retval"

См. страницу справочника. Также этот вопрос и эта статья.

Stderr

Как другой предложенный ответ, stderr является хорошим местом для отправки вывода отладки. Можно также сделать намного больше, чем просто возвращаемое значение. Попробуйте это:

function add_nos {
    echo "input: $1" >&2
    echo $(($1 + 20))
    echo "done now!" >&2
}

echo "starting script" >&2
result=`add_nos $1`
echo "result: $result"

Затем выполните его с и без отладки, произведенной перенаправление stderr:

$ bash setup.sh 10  
starting script
input: 10
done now!
result: 30

$ bash setup.sh 10 2>/dev/null
result: 30

$ bash setup.sh 10 2>logfile
result: 30

$ cat logfile
starting script
input: 10
done now!
0
ответ дан 30 October 2019 в 06:57

Другие вопросы по тегам:

Похожие вопросы: