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

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

Вот.. В моем случае и f1.sh, и f2.sh - разные файлы. Так что, если оператор печатает другой(как и ожидалось), но как условие становится ложным, а управление меняется на оператор else ... Как это происходит .. Как условие становится ложным ..? Как эти команды diff ведут себя здесь Пожалуйста, объясните процесс подробно. Заранее спасибо (извините, если мой английский слишком плохой ..)

1 ответ1

4

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

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .