
Я попробовал следующий код..
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, если он есть. Статус выхода статус завершения последней выполненной команды или ноль, если условия отсутствуют проверено верно.