2013-06-26 4 views

ответ

2

В первом примере команда 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 

вы не будете иметь никакого вывода.

+0

Внезапно вспомнил, что я сделал такие сценарии. Я даже рисовал блок-схему, чтобы видеть. – Magicloud

4

Последние всегда будут работать должным образом интуитивно. Первый имеет граничное условие, в котором могут выполняться как command2, так и command3.

+1

Два примера ведут себя по-другому, это ясно. Который ведет себя «правильно», и какой из них, конечно, глючит, зависит от того, что подразумевалось под смыслом! – Celada

+0

@Celada: Исправлено. –

+2

Я здесь немного спорный, но я не думаю, что «интуитивно» - лучшее слово. Рассмотрим 'is_feature_enabled && run_feature || notify_feature_failed': он является интуитивным и правильным, но версия 'if/then/else/fi' не является ни интуитивной, ни правильной. – Celada

Смежные вопросы