Как я могу использовать && со своими собственными функциями?

Запуск этого вывода выводит оба оператора

#!/bin/bash
echo "Hello" && echo "World"

Однако при запуске этого файла выдается только "Hello"

#!/bin/bash
message() {
 echo "Hello"
 return 1
}
message && echo "World"

Почему это не работает и как я могу изменить свой script, чтобы он это сделал?

5 ответов

Значение "выхода" 0 означает успех, а что-то еще означает сбой. и && оператор не выполняет правую сторону, если левая сторона терпит неудачу (то есть, если она возвращает ненулевое значение)

Итак, измените return 1 на return 0


return 1 (или что-либо еще, что не равно 0) означает false до bash, что означает, что вторая команда не будет вызываться.

Используйте return 0 (это означает true) или привяжите их с помощью других операторов (например, || или ;.)

Как упоминалось в комментарии, технически bash не имеет логических значений, а && и || не описаны как "логические операторы короткого замыкания" в руководстве, но "управляющие операторы" ". Поскольку a && b означает" запустить b тогда и только тогда, когда a преуспел ", а" успех" определяется как нулевой код выхода (а команда true всегда возвращает 0, а false возвращает 1), чистый эффект такой же, как и описанный выше.


В bash возвращаемое значение 1 указывает на ошибку.

Попробуйте return 0


& & выполняет вторую команду только в том случае, если первый успешно, то есть имеет 0 результат


Удалить оператор return в вашей функции message().

licensed under cc by-sa 3.0 with attribution.