Bash/sh-разница между && и;
Я обычно использую ;
объединить более одной команды в строке, но некоторые люди предпочитают &&
. Есть ли разница? Например, cd ~; cd -
и cd ~ && cd -
кажется, сделать то же самое. Какая версия более портативна, например, будет поддерживаться подмножеством bash, таким как оболочка Android или так?
7 ответов:
Если предыдущая команда завершилась с
;
второй будет работать.но с
&&
второй не будет работать.это "ленивый" логический " и " операнд между операциями.
Я использую
&&
потому что давным - давно на соседнем компьютере: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).это покрыто в bash manpage под
Lists
. Я ожидал бы, что любая Unix-подобная оболочка будет поддерживать оба этих оператора, но я не знаю конкретно о оболочке Android.
&&
означает выполнить следующую команду, если предыдущая завершилась с кодом 0. Для противоположного, используйте||
т. е. выполняется, если предыдущая команда выходит со статусом не равным 0;
выполняется всегда.очень полезно, когда вам нужно принять определенное действие в зависимости от того, если предыдущая команда закончила ОК или нет.
&&
позволяет условное выполнение в то время как;
всегда выполняется вторая команда., например,
command1 && command2
,command2
будет выполняться только тогда, когдаcommand1
был расторгнут сexit 0
, сигнализация все прошло хорошо, в то время как вcommand1 ; command2
вторая команда всегда будет выполняться независимо от того, что результат былcommand1
.