2016-08-29 2 views
2

Я изучаю bash. Я узнал, что возвращаемое значение команды или функции является целым значением. Интересно, должен ли я рассматривать его как целое число в явном виде,Как обработать возвращаемое значение команды или функции? Как строка или целое число?

declare -i return_value 
bash some_function 
return_value=$? 
if ((return_value == 1)); then 
    exit 1 
fi 

или рассматривать его в качестве значения строки.

bash some_function 
return_value="$?" 
if [[ "$return_value" == "1" ]]; then 
    exit 1 
fi 

Пожалуйста, сообщите мне свой ответ или комментарий. Большое спасибо.

+1

В качестве целого. либо, если у вас есть, или 'if [[$ return_value -eq 1]]' (вам не нужно указывать переменные в '[[...]]' (везде, когда вы это делаете), когда сомневаетесь, двойная кавычка это –

+0

@ Давид К. Рэнкин: Спасибо за ваш комментарий. Я согласен с вами. Цитирование LHS в [[]] не обязательно. – mora

ответ

3

Это целое число, так что вы должны рассматривать его как таковой. Однако не обязательно (и не редко) объявлять переменную заранее.

Это действительно вопрос предпочтений, но я бы, вероятно, пойти с этим:

bash some_function 
return_value=$? 
if [ $return_value -eq 1 ]; then 
    exit 1 
fi 

просто потому, что вы знаете, что это код возврата, так что вам не нужно быть осторожным со ссылкой или использовать расширенный тест [[. Использование -eq в отличие от = сообщает о том, что вы работаете с целым числом.

Вы также можете рассмотреть этот вариант, в зависимости от контекста:

if ! some_function; then 
    exit 1 
fi 

Это немного отличается, так как он не делает различий между ненулевыми кодами выхода, но он может делать то, что вы хотите ,

2

Exit codes and exit status are integers, но в bash variables are untyped, поэтому вы можете рассматривать их как строки или целые числа.

Я предпочитаю, чтобы рассматривать их как целые числа, и я часто вижу идиоматическое конструкцию с $? и целым числом операторов сравнения, например, так:

some_function 
if [ $? -ne 0 ]; then 
    # handle error here 
fi 
Смежные вопросы