true && true || false && false == false (ничего не понимаю...)

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

true && true || false && false == false

Сообщение drBatty »

$

true && true || false && false; echo $? 1


и это при том, что true && true == true и true && true || false == true

ЧЯДНТ?

да,

Код: Выделить всё

$ echo $BASH_VERSION
4.2.24(2)-release
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5456
ОС: Gentoo

Re: true && true || false && false == false

Сообщение /dev/random »

drBatty писал(а):
04.07.2012 11:57

$

true && true || false && false; echo $? 1


и это при том, что true && true == true и true && true || false == true

ЧЯДНТ?

&& и || имеют один и тот же приоритет. Последний "&& false" превращает в false что угодно, отсюда и ненулевой код ошибки.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: true && true || false && false == false

Сообщение drBatty »

/dev/random писал(а):
04.07.2012 12:03
&& и || имеют один и тот же приоритет. Последний "&& false" превращает в false что угодно, отсюда и ненулевой код ошибки.

но ведь команды выполняются слева направо, и в мане сказано, что
command1 && command2

command2 is executed if, and only if, command1 returns an exit status of zero.

An OR list has the form

command1 || command2

command2 is executed if and only if command1 returns a non-zero exit status. The return status of AND and OR lists is the exit status
of the last command executed in the list.

разве не очевидно, что получив true && true == true, следующую команду можно не выполнять?

$

echo 10; true && echo 20; true || echo 30; false && echo 40; false; echo $? 10 20 1


видно, что выполнились только 2 echo, и в итоге должно получится true. До последнего вообще не доходит (как и должно быть)
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5456
ОС: Gentoo

Re: true && true || false && false == false

Сообщение /dev/random »

drBatty писал(а):
04.07.2012 12:21
разве не очевидно, что получив true && true == true, следующую команду можно не выполнять?

"Следующую команду" - это "|| false". К "&& false", идущей после этого, это не относится: как вы сами видите из вашей цитаты, "&&" применяется как раз при нулевом статусе.
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: true && true || false && false == false

Сообщение SLEDopit »

Код: Выделить всё

true && true || { false && false; } ; echo $?
0
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21433
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: true && true || false && false == false

Сообщение Bizdelnick »

drBatty писал(а):
04.07.2012 12:21
разве не очевидно, что получив true && true == true, следующую команду можно не выполнять?

А || false и не выполняется. В отличие от следующей за ней && false.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: true && true || false && false == false

Сообщение drBatty »

/dev/random писал(а):
04.07.2012 12:25
"Следующую команду" - это "|| false". К "&& false", идущей после этого, это не относится: как вы сами видите из вашей цитаты, "&&" применяется как раз при нулевом статусе.

ах вот оно как... я-то думал, что прерывается работа всего списка на первой true (при &&), а оно только одну команду пропускает...
drBatty писал(а):
04.07.2012 12:21
echo 10; true && echo 20; true || echo 30; false && echo 40; false; echo $?

тогда неясна работа этой строки - должна была пропуститься echo 30, а команды false && echo 40; false выполниться. Однако происходит не так.
SLEDopit писал(а):
04.07.2012 12:28
true && true || { false && false; } ; echo $?

я знаю.
drBatty писал(а):
04.07.2012 11:57
true && true || false == true



drBatty писал(а):
04.07.2012 12:42
а команды false && echo 40; false выполниться.

а, ну да, понял теперь

Код: Выделить всё

        if(1 && 1 || 0 && 0)
                printf("true");

на C/C++ печатает true
хотя и
suggest parentheses around «&&» within «||» [-Wparentheses]
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: true && true || false && false == false

Сообщение watashiwa_daredeska »

drBatty писал(а):
04.07.2012 12:42
а команды false && echo 40; false выполниться. Однако происходит не так.
А как Вы определили, что происходит не так? Эти команды не делают ничего видимого, кроме того, что возвращают exit status ≠ 0.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: true && true || false && false == false

Сообщение drBatty »

watashiwa_darede... писал(а):
04.07.2012 12:58
А как Вы определили, что происходит не так? Эти команды не делают ничего видимого, кроме того, что возвращают exit status ≠ 0.

говорю-же, понял я. понял. Сбило то, что в С это работало. А тут - нет. Если подумать, то и не удивительно.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: