логика оболочки И, cmd1 && cmd2, она перевернута, верно? - PullRequest
3 голосов
/ 29 марта 2012

Мы знаем, && означает логический AND, поэтому:

true && true  => true
false && true => false

Когда мы работаем в Shell (здесь Bash), успешный командный вызов возвращает 0.Меняется ли оболочка с 0 на non-zero до операции AND?Или Оболочка просто обратная норма logics?

Например:

cat file1 && cat file2

file2 будет cat-ed, только если file1 может бытьcat-ed.

Ответы [ 2 ]

5 голосов
/ 29 марта 2012

В оболочке (включая bash) && означает логическое И.Параметры && могут быть командами, которые будут оцениваться в соответствии с их возвращаемым значением - возвращаемое значение 0 означает успех (true), сбой других значений (false).

Так в C / C ++смысл это наоборот (в C / C ++ и его ilk 0 = false, other = true), но с точки зрения оболочки это не так (success = true, fail = false)

ОБНОВЛЕНИЕ: изменение объяснения на основекомментарий, что && не обязательно включает в себя выполнение команд

1 голос
/ 29 марта 2012

В Bash логический true представлен как 0, а логический false представлен как ненулевое значение. Это позволяет использовать значение выхода команды в логической операции.

Вы можете узнать больше, просмотрев документацию по операторам bash .

Одна общая идиома предназначена для объединения команд с помощью &&, чтобы в случае сбоя какой-либо команды в цепочке не выполнялись следующие команды:

cmd1 && cmd2 && cmd3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...