Обычно я использую ; для объединения нескольких команд в строку, но некоторые предпочитают &&. Есть ли разница? Например, 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