k sh и условный список вызовов функций, таких как fun1 && fun2 - PullRequest
0 голосов
/ 31 марта 2020

Я полностью застрял с этим

#!/bin/ksh

function one {
  echo one
  return 0
}

function two {
  echo two
  return 0
}

one && two

Он печатает

one
two

Почему? Я ожидаю, что два никогда не будут вызваны, потому что один возвращает 0 ($? -eq 0!) Что я делаю не так?

Надеюсь, это банальная ошибка.

1 Ответ

2 голосов
/ 31 марта 2020

Что касается:

Я надеюсь, что это банальная ошибка.

Иногда ваши надежды do сбываются: -)

Ноль - это успешный код возврата. Если вы хотите указать сбой, вам нужно вернуть ненулевое значение.

Для страницы man для ksh (это аналогично bash и, возможно, другим оболочкам), мы обратите внимание, что:

cmd1 && cmd2 выполняется cmd2 только в том случае, если состояние выхода cmd1 равно нулю;

Вы можете увидеть это, запустив true ; echo $? - вы должны получить нулевое значение.

...