Bash функция возвращает неожиданное значение - PullRequest
0 голосов
/ 16 марта 2020
function() {
   if something_that_will_fail; then
      irrelevantcode
   else
      echo "should be here"
      false
   fi
}

echo $function

Это выводит "должно быть здесь". Как мне получить значение false?

Ответы [ 2 ]

1 голос
/ 16 марта 2020

Вы, похоже, путаете вывод с возвращаемым значением .

$function - это переменная, кажется, вы ее нигде не заполняете. Чтобы заполнить его выводом функции, используйте

output=$(function_call)

Возвращаемое значение функции можно получить из специальной переменной $?.

function_call
value=$?

Если вы хотите используйте его в условии, вам часто вообще не нужна переменная, поскольку вы можете запустить функцию непосредственно в условии:

function_call
if (( $? )) ; then
    echo There was an error
else
    echo Everything OK
fi

можно сократить до

if function_call ; then
    echo Everything OK
else
    echo There was an error
fi
0 голосов
/ 16 марта 2020

Bash не имеет встроенных логических переменных. Кроме того, вызов функции а-ля $function_name также кажется мне неправильным.

Я не уверен, чего вы пытаетесь достичь, но у вас есть два варианта:

  • Вы можете выводить строки в вашей функции и впоследствии извлекать их.
  • Кроме того, вы также можете установить состояние выхода вашей функции с помощью клавиши return (это то, что означает return); здесь вы также можете указать код состояния в диапазоне 0-255 для вашего return, где 0 означает, что функция успешно завершена, а все остальные цифры указывают на обратное.

Пример:

#!/usr/bin/env bash

function is_greater() {
   local value1=$1     
   local value2=$2

   if [[ $value1 -gt $value2 ]]; then
        printf "%s is greater than %s! \n" $value1 $value2
        return 0
   else 
        printf "%s is NOT greater than %s! \n" $value1 $value2
        return 1
   fi
}

what_func_says=$(is_greater 21 42)
func_exit_status=$?

if [[ $func_exit_status -eq 0 ]]; then
  echo $what_func_says
  printf "success code: %s \n" $func_exit_status
else
  echo $what_func_says
  printf "error code: %s \n" $func_exit_status
fi

Вывод:

21 is NOT greater than 42!
error code: 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...