командная строка - какова цель &&
?
В оболочке, когда вы видите
$ command one && command two
цель состоит в том, чтобы выполнить команду, которая следует за &&
, только если первая команда выполнена успешно Это идиоматично для оболочек Posix, и встречается не только в Bash.
Он намеревается предотвратить запуск второго процесса в случае сбоя первого.
Процессы возвращают 0 для true, другие положительные числа для false
Программы возвращают сигнал при выходе. Они должны возвращать 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
.
В первом случае false - это команда, которая выходит со статусом 1
$ false
$ echo $?
1
, что означает echo foo
не работает (т.е. короткое замыкание echo foo
). Затем выполняется команда echo bar
.
Во втором случае true выходит с кодом 0
$ true
$ echo $?
0
и, следовательно, echo foo
не выполняется, тогда echo bar
выполняется.