Как правильно проверить возвращаемое значение функции bash? - PullRequest
49 голосов
/ 05 июня 2011

Я хотел бы проверить возвращаемое значение функции bash в выражении if, например:

if [[ func arg ]] ; then …

, но я получаю сообщения об ошибках типа: ожидается условный двоичный оператор.правильный способ сделать это?

Это:

 if [[ $(func arg) ]] ; then ...

Ответы [ 3 ]

63 голосов
/ 05 июня 2011

Если бы это был код выхода, а не результат, вы могли бы просто использовать

if func arg; then ...

Если вы не можете заставить функцию возвращать правильный код выхода (с return N), и вам нужно использовать строковые результаты, используйте ответ @Alex Gitelman.

$ help if

if: if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi

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

Список if COMMANDS выполнен. Если его статус выхода равен нулю, то then COMMANDS список выполнен. В противном случае каждый список elif COMMANDS выполняется по очереди, и если его статус выхода равен нулю, соответствующий then COMMANDS список выполняется и команда if завершается. Иначе, список «else COMMANDS» выполняется, если присутствует. Статус выхода вся конструкция - это состояние выхода последней выполненной команды, или ноль если ни одно условие не проверено верно.

Статус выхода: Возвращает статус последней выполненной команды.

15 голосов
/ 05 июня 2011

Эта ошибка возникает, если функция возвращает более одного слова.

Например, 1 2.

Просто процитируйте это:

"$(func arg)"

Пример:

$ if [[ 1 2 ]] ; then echo 1 ; fi
-bash: conditional binary operator expected
-bash: syntax error near `2'
$ if [[ "1 2" ]] ; then echo 1 ; fi
1

И если вы сравниваете 0 с не 0, просто используйте

if [[ "$(func arg)" != "0" ]]
14 голосов
/ 22 февраля 2012

Это было полезно для меня, поэтому я бы добавил следующие детали:

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

if func arg && [[ $foo -eq 1 ]]; then echo TRUE; else echo FALSE; fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...