Ответ 1

&& позволяет вам сделать что-то, основанное на успешной успешной работе предыдущей команды, - поэтому вы склонны видеть ее цепью как do_something && do_something_else_that_depended_on_something.

Ответ 2

Кроме того, у вас также есть || что является логическим или, а также ; это просто разделитель, который не заботится о том, что случилось с командой раньше.

$ false || echo "Oops, fail"
Oops, fail

$ true || echo "Will not be printed"
$  

$ true && echo "Things went well"
Things went well

$ false && echo "Will not be printed"
$

$ false ; echo "This will always run"
This will always run

Некоторые подробности об этом можно найти здесь. Списки команд в руководстве по Bash.

Ответ 3

командная строка - какова цель &&?

В раковине, когда вы видите

$ command one && command two

намерение состоит в том, чтобы выполнить команду, которая следует за && только если первая команда успешна. Это идиоматично для оболочек Posix, а не только в Bash.

Он намерен предотвратить запуск второго процесса в случае сбоя первого.

Процессы возвращают 0 для истины, другие положительные числа для ложных

Программы возвращают сигнал при выходе. Они должны возвращать 0, если они успешно завершены, или больше нуля, если они этого не делают. Это позволяет ограниченное количество связи между процессами.

&& упоминается как AND_IF в грамматике оболочки posix, которая является частью списка команд and_or, который также включает в себя || который является OR_IF с похожей семантикой.

Грамматические символы:

%token  AND_IF    OR_IF    DSEMI
/*      '&&'      '||'     ';;'    */

Грамматика:

and_or           :                         pipeline
                 | and_or AND_IF linebreak pipeline
                 | and_or OR_IF  linebreak pipeline

Оба оператора имеют одинаковый приоритет и оцениваются слева направо (они являются ассоциативными слева). Например, следующее:

$ false && echo foo || echo bar
$ true || echo foo && echo bar

оба эхо только bar.

  1. В первом случае false - это команда, которая выходит со статусом 1

    $ false
    $ echo $?
    1
    

    что означает, что echo foo не запускается (т.е. короткое замыкание echo foo). Затем команда echo bar выполняется.

  2. Во втором случае true выходит с кодом 0

    $ true
    $ echo $?
    0
    

    и, следовательно, echo foo не выполняется, тогда echo bar выполняется.

Ответ 4

Довольно распространенное использование для '& &' компилирует программное обеспечение с помощью autotools. Например:

./configure --prefix=/usr && make && sudo make install

В принципе, если конфигурация завершается успешно, make запускается для компиляции, и если это удается, make выполняется от root для установки программы. Я использую это, когда я в основном уверен, что все будет работать, и это позволяет мне делать другие важные вещи, такие как смотреть на stackoverflow, а не "отслеживать" прогресс.

Иногда я действительно увлекаюсь...

tar xf package.tar.gz && ( cd package; ./configure && make && sudo make install ) && rm package -rf

Я делаю это, когда, например, создаю linux с нуля.

Ответ 5

&& объединяет команды. Последовательные команды выполняются только в том случае, если предыдущие выполняются.

Аналогично, || позволит выполнить последовательную команду, если предыдущее не выполнено.

См. Bash Программирование оболочки.

Ответ 6

См. пример:

mkdir test && echo "Something" > test/file

Shell попытается создать каталог test, а затем , только если он был успешно, попробуйте создать файл внутри него.

Таким образом, вы можете прервать последовательность шагов, если один из них потерпел неудачу.

Ответ 7

command_1 && command_2: выполнить команду_2 только тогда, когда команда_ успешно выполнена.

command_1 || command_2: выполнить команду_2 только тогда, когда команда_1 не выполнена успешно.

Похоже, как условие "если" выполняется на основном языке программирования, например, в if (condition_1 && condition_2){...} условие_2 будет опущено, если условие_1 равно false, а в if (condition_1 || condition_2){...} условие_2 будет опущено, если условие_1 равно true. Смотрите, это тот же трюк, который вы используете для кодирования:)

Ответ 8

Он должен выполнить второй оператор, если первый оператор завершится успешно. Как оператор if:

 if (1 == 1 && 2 == 2)
  echo "test;"

Сначала он пытается, если 1 == 1, если это правда, он проверяет, 2 == 2