В чем разница между этими двумя?В чем разница между этими двумя способами в bash?
Использование
&&
и||
:command1 && command2 || command3
Использование
if
иelse
:if command1 then command2 else command3 fi
В чем разница между этими двумя?В чем разница между этими двумя способами в bash?
Использование &&
и ||
:
command1 && command2 || command3
Использование if
и else
:
if command1
then
command2
else
command3
fi
В первом примере команда 3 будет выполнена, если сбой команды command1 или command2: если команда1 проходит, но команда 2 не работает, команда 3 будет выполнена. В примере if-then-else команда3 будет выполняться только тогда, когда команда 1 завершится с ошибкой.
Другими словами, первый один, при переводе на если-то-иначе становится:
if command1
then
if !command2
then
command3
fi
else
command3
fi
С command1 = верно, command2 = ложь и command3 = эхо «что-то» вы можете увидеть разницу. Версия &&-||
:
true && false || echo 'something'
даст something
в качестве выходного сигнала. При использовании версии if-then-else
:
if true
then
false
else
echo 'something'
fi
вы не будете иметь никакого вывода.
Последние всегда будут работать должным образом интуитивно. Первый имеет граничное условие, в котором могут выполняться как command2
, так и command3
.
Два примера ведут себя по-другому, это ясно. Который ведет себя «правильно», и какой из них, конечно, глючит, зависит от того, что подразумевалось под смыслом! – Celada
@Celada: Исправлено. –
Я здесь немного спорный, но я не думаю, что «интуитивно» - лучшее слово. Рассмотрим 'is_feature_enabled && run_feature || notify_feature_failed': он является интуитивным и правильным, но версия 'if/then/else/fi' не является ни интуитивной, ни правильной. – Celada
Внезапно вспомнил, что я сделал такие сценарии. Я даже рисовал блок-схему, чтобы видеть. – Magicloud