как команда diff ведет себя в операторе if в скрипте оболочки

как команда diff ведет себя в операторе if в скрипте оболочки

Я попробовал следующий код..

if diff f1.sh f2.sh; then
  echo Same
else
  echo Different
fi

Вот.. В моем случае обаф1.шиф2.шэто разные файлы.. Так что если оператор печатаетДругой(как и ожидалось) Но как это состояние становитсяЛОЖЬи управление изменяется на оператор else... Как это происходит.. Как условие становится ложным..? Как здесь ведут себя эти команды diff.. Пожалуйста, объясните процесс подробно.. Заранее спасибо (извините, если мой английский слишком плох..)

решение1

Это сделано намеренно. Если вы посмотрите на diffстраницу руководства, вы увидите следующее утверждение:

Статус выхода — 0, если входы одинаковы, 1 — если разные, 2 — если возникла проблема.

Статус выхода 0означает trueдля оболочки, поэтому отображается "Same". В обоих других возможных статусах отображается "Different", так как все, что не равно нулю, является false.

Поведение ifописано на странице руководства оболочки, например здесь bash:

if list; then list; [ elif list; then list; ] ... [ else list; ] fi
  • Список if выполняется. Если его статус выхода равен нулю, то список then
    выполняется. В противном случае каждый список elif выполняется по очереди, и если его выход
    статус равен нулю, затем выполняется соответствующий список и команда
    завершается. В противном случае выполняется список else, если он есть. Статус выхода
    статус завершения последней выполненной команды или ноль, если условия отсутствуют
    проверено верно.

Связанный контент