bash функция завершается ошибкой с set -e - PullRequest
1 голос
/ 26 февраля 2020

Я обнаружил странное поведение при использовании set -e. Простой код: [ ${var} } && echo "text" отлично работает вне функции, но заставляет скрипт завершать работу, когда тот же код находится в функции. Это происходит только в том случае, если var="".

. Код также работает нормально, если я использую || или если я установил переменную в переменную. У кого-нибудь есть объяснение этому?

#!/bin/bash
#version 4.4.20(1)
#set -x
set -e
var=
[ ${var} ] && echo "Test before function"
echo "Before function"
function test {
    [ ${var} ] && echo "Test inside function"
}

test
echo end

1 Ответ

3 голосов
/ 26 февраля 2020

Примите во внимание следующее:

  • false && true выходит со статусом выхода false.

  • Значение по умолчанию для функции равно Возвращаемое значение последней вещи, которую он выполнил.

  • set -e определено, чтобы вызвать досрочное завершение, если любая команда unchecked ("unchecked" - это слово, которое, в этом контексте имеет сложное, заполненное оговорками, зависящее от версии, непереносимое и часто удивительное определение) возвращает состояние выхода, отличное от true.

Таким образом, когда у вас есть функция, которая запускает a-false-thing && a-true-thing как свою последнюю команду перед возвратом, сама функция вернет false, и set -e прекратит выполнение, если сочтет вызов функции «проверенным».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...