Не будучи экспертом ни в Linux, ни в Unix, мне интересно, в чем разница между этими двумя методами, когда две команды расположены в одной строке? Я не вижу разницы в выходных данных в этом упрощенном примере
Pete$date ; time
Sun Mar 17 19:37:20 EDT 2013
real 0m0.000s
user 0m0.000s
sys 0m0.000s
Pete$date &&time
Sun Mar 17 19:37:46 EDT 2013
real 0m0.000s
user 0m0.000s
sys 0m0.000s
Это не вызвало никаких проблем - мне просто любопытно ..
&&
является логическим «и». Первый аргумент оценивается, а второй - только если первый возвращает true. Причина в том, что «false И что-то» всегда ложно, поэтому нет необходимости оценивать второй аргумент в этом случае.
Таким образом, используя &&
, вы убедитесь, что вторая команда не выполняется, если первая сообщает об ошибке (true
представлен кодом выхода 0
, который указывает, что ошибки не было). Напротив, ;
выполняет обе команды, независимо от того, каков результат первой.
Вывод: объединение команд с помощью &&
- хорошая привычка. В отличие от ;
, он не будет выполнять последующие команды, если что-то пойдет не так.
Последовательно выполняет команды, каков предыдущий статус выхода был:
# sh -c "exit 0" ; echo "2nd command"
2nd command
# sh -c "exit 1" ; echo "2nd command"
2nd command
Логичный И
Выполните следующую команду, но только если предыдущая команда успешно выполнилась (статус выхода был 0
):
# sh -c "exit 0" && echo "2nd command"
2nd command
# sh -c "exit 1" && echo "2nd command"
#
Логичный ИЛИ
Выполните следующую команду, но только если предыдущая неудавшаяся команда (статус выхода не был 0
):
# sh -c "exit 0" || echo "2nd command"
#
# sh -c "exit 1" || echo "2nd command"
2nd command