Когда внутри условия оператора if почему я не могу выполнить функцию и проверить результат - PullRequest
1 голос
/ 08 октября 2019

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

Моя функция выглядит так:

MyFunction(){
fuctionArg1=$1
functionArg2=$2
echo "Inside the function, arg1 is $functionArg1"
echo "Inside the function, arg2 is $functionArg2"

return 1
}

У меня сейчас есть утверждение if:

arg1=10
arg2=20

MyFunction $arg1 $arg2
if [ $? == 1 ] ; then
echo "Hello"
else
echo "Nothing"
fi

Но почему не работает что-то подобное ниже? В настоящее время кажется, что он возвращается только как 1, даже если возвращаемое значение MyFunction установлено в 0:

arg1=10
arg2=20


if [ "$(MyFunction "$arg1" "$arg2")" == 1 ] ; then
echo "Hello"
else
echo "Nothing"
fi

1 Ответ

0 голосов
/ 08 октября 2019

Используя подстановку команд, я не думаю, что это возможно.

Подстановка команды позволяет выводу команды заменить саму команду.

Так что то, что будет проверено в операторе if, будет выходом из функции (операторы echo).

Без операторов echo выходных данных нет, поэтому оператор if всегда оценивается как ложный.

Можно просто передать вызов функции в качестве аргументаif. Обратите внимание, что выражение if оценивается как истинное, если return 0, ложное, если return 1. Я считаю, что это соглашение Linux - возвращение 0 указывает на успех, ненулевое указывает на состояние ошибки.

if MyFunction "$arg1" "$arg2; then
   echo "Hello"
else
   echo "Nothing"
fi

В MyFunction возвращает 0. Или возвращает 1 и отрицает выражение таким образом:

if ! MyFunction "$arg1" "$arg2; then
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...