Обычно я использую ;
для объединения нескольких команд в строку, но некоторые предпочитают &&
. Есть ли разница? Например, cd ~; cd -
и cd ~ && cd -
, похоже, делают то же самое. Какая версия более переносима, например. будет поддерживаться bash -subset как Android-оболочка или так?
Bash/sh - разница между && и;
Ответ 1
Если предыдущая команда не удалась с ;
, второй будет запущен.
Но с &&
вторая не будет работать.
Это "ленивый" логический "AND" операнд между операциями.
Ответ 2
Я использую &&
, потому что давным-давно на ближайшем компьютере:
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 *
является безопасным...;)
Ответ 3
В cmd1 && cmd2
, cmd2
выполняется, только если cmd1
успешно (возвращает 0).
В cmd1 ; cmd2
, cmd2
выполняется в любом случае.
Обе конструкции являются частью оболочки, совместимой с POSIX.
Ответ 4
Команды, разделенные символом ;
, выполняются последовательно независимо от их статуса завершения.
С &&
вторая команда выполняется только в том случае, если первое завершено успешно (возвращает статус завершения 0).
Это описано в man bash в разделе Lists
. Я бы ожидал, что любая Unix-подобная оболочка будет поддерживать оба этих оператора, но я не знаю конкретно о оболочке Android.
Ответ 5
&&
означает выполнение следующей команды, если предыдущий вышел со статусом 0.
В противном случае используйте ||
, чтобы выполняться, если предыдущая команда выходит со статусом, не равным 0 ;
, выполняется всегда.
Очень полезно, когда вам нужно выполнить определенное действие в зависимости от того, закончилась ли предыдущая команда ОК или нет.
Ответ 6
&&
допускает условное выполнение, тогда как ;
всегда выполняет вторую команду.
В частности. command1 && command2
, command2
будет выполняться только тогда, когда command1
закончил с exit 0
, сигнализация прошла хорошо, а в command1 ; command2
вторая команда всегда будет выполняться независимо от результата command1
.
Ответ 7
& & логически И в bash. Bash имеет оценку короткого замыкания логического И. Эта идиома - более простой способ выразить следующее:
cmd1;rc=$?
if [ $rc -eq 0 ]; then
cmd2
fi
В то время как; версия просто:
cmd1
cmd2