2012-03-29 7 views
3

Мы знаем && означает логическое AND, так:логика корпуса AND, cmd1 && cmd2, она обратная, правда?

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

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

В качестве примера:

cat file1 && cat file2 

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

ответ

1

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

Вы можете узнать больше, просмотрев documentation on bash operators.

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

cmd1 && cmd2 && cmd3 
+0

Это может произойти следующим образом: 'if [-f file1] && [-f file2]; затем cat file1 && cat file2; fi' –

5

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

Таким образом, в некотором смысле C/C++ это обратное (в C/C++ и его иже 0 = ложно, другой = истина), но с точки зрения оболочки это не так (успех = правда, не в состоянии = ложь)

UPDATE: изменилось объяснение, основанное на комментарий, который && не necesarily включать выполнение команд

+0

Не совсем, '' && является подлинным логическим оператором в Баш. выполнение является побочным эффектом. Это похоже на C: 'if ((method() && method2()) == 0);' никогда не будет выполнять 'method2()', если 'method' возвращает false. – brice

+0

@brice - спасибо, я обновил свой ответ – Attila