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.