Ответ 1
Если предыдущая команда не удалась с ;
, второй будет запущен.
Но с &&
вторая не будет работать.
Это "ленивый" логический "AND" операнд между операциями.
Обычно я использую ;
для объединения нескольких команд в строку, но некоторые предпочитают &&
. Есть ли разница? Например, cd ~; cd -
и cd ~ && cd -
, похоже, делают то же самое. Какая версия более переносима, например. будет поддерживаться bash -subset как Android-оболочка или так?
Если предыдущая команда не удалась с ;
, второй будет запущен.
Но с &&
вторая не будет работать.
Это "ленивый" логический "AND" операнд между операциями.
Я использую &&
, потому что давным-давно на ближайшем компьютере:
root# pwd
/
root# cd /tnp/test; rm -rf *
cd: /tnp/test: No such file or directory
...
... and after a while ...
...
^C
но не помогло...;)
cd /tnp/test && rm -rf *
является безопасным...;)
В cmd1 && cmd2
, cmd2
выполняется, только если cmd1
успешно (возвращает 0).
В cmd1 ; cmd2
, cmd2
выполняется в любом случае.
Обе конструкции являются частью оболочки, совместимой с POSIX.
Команды, разделенные символом ;
, выполняются последовательно независимо от их статуса завершения.
С &&
вторая команда выполняется только в том случае, если первое завершено успешно (возвращает статус завершения 0).
Это описано в man bash в разделе Lists
. Я бы ожидал, что любая Unix-подобная оболочка будет поддерживать оба этих оператора, но я не знаю конкретно о оболочке Android.
&&
означает выполнение следующей команды, если предыдущий вышел со статусом 0.
В противном случае используйте ||
, чтобы выполняться, если предыдущая команда выходит со статусом, не равным 0 ;
, выполняется всегда.
Очень полезно, когда вам нужно выполнить определенное действие в зависимости от того, закончилась ли предыдущая команда ОК или нет.
&&
допускает условное выполнение, тогда как ;
всегда выполняет вторую команду.
В частности. command1 && command2
, command2
будет выполняться только тогда, когда command1
закончил с exit 0
, сигнализация прошла хорошо, а в command1 ; command2
вторая команда всегда будет выполняться независимо от результата command1
.
& & логически И в bash. Bash имеет оценку короткого замыкания логического И. Эта идиома - более простой способ выразить следующее:
cmd1;rc=$?
if [ $rc -eq 0 ]; then
cmd2
fi
В то время как; версия просто:
cmd1
cmd2