Подтвердить что ты не робот

Каков правильный способ тестирования возвращаемого значения функции bash?

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

if [[ func arg ]] ; then …

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

Каков правильный способ сделать это?

Это:

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

Ответ 1

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

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 '. Статус выхода     целая конструкция - это статус выхода последней выполненной команды или нуль     если никакое условие не проверено верно.

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

Ответ 2

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

Например, 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 vs non 0, просто используйте

if [[ "$(func arg)" != "0" ]]

Ответ 3

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

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

if func arg && [[ $foo -eq 1 ]]; then echo TRUE; else echo FALSE; fi