На самом деле это единственный раздел про unix на этом форуме
Модераторы: /dev/random , Модераторы разделов
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Сообщение
drBatty » 04.07.2012 11:57
$
true && true || false && false; echo $?
1
и это при том, что true && true == true и true && true || false == true
ЧЯДНТ?
да,
/dev/random
Администратор
Сообщения: 5456
ОС: Gentoo
Сообщение
/dev/random » 04.07.2012 12:03
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
Сообщение
drBatty » 04.07.2012 12:21
/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. До последнего вообще не доходит (как и должно быть)
/dev/random
Администратор
Сообщения: 5456
ОС: Gentoo
Сообщение
/dev/random » 04.07.2012 12:25
drBatty писал(а): ↑ 04.07.2012 12:21
разве не очевидно, что получив true && true == true, следующую команду можно не выполнять?
"Следующую команду" - это "|| false". К "&& false", идущей после этого, это не относится: как вы сами видите из вашей цитаты, "&&" применяется как раз при нулевом статусе.
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL
Сообщение
SLEDopit » 04.07.2012 12:28
Код: Выделить всё
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
Сообщение
Bizdelnick » 04.07.2012 12:30
drBatty писал(а): ↑ 04.07.2012 12:21
разве не очевидно, что получив true && true == true, следующую команду можно не выполнять?
А || false и не выполняется. В отличие от следующей за ней && false.
Пишите правильно:
в консоли
вк у́пе (с чем-либо)
в о бщем
воо бще в течение (часа)
новичо к
ню анс
по у молчанию приемле мо
проблем а
пробо вать
траф ик
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Сообщение
drBatty » 04.07.2012 12:42
/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 выполниться.
а, ну да, понял теперь
на C/C++ печатает true
хотя и
suggest parentheses around «&&» within «||» [-Wparentheses]
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux
Сообщение
watashiwa_daredeska » 04.07.2012 12:58
drBatty писал(а): ↑ 04.07.2012 12:42
а команды false && echo 40; false выполниться. Однако происходит не так.
А как Вы определили, что происходит не так? Эти команды не делают ничего видимого, кроме того, что возвращают exit status ≠ 0.
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Сообщение
drBatty » 04.07.2012 14:37
watashiwa_darede... писал(а): ↑ 04.07.2012 12:58
А как Вы определили, что происходит не так? Эти команды не делают ничего видимого, кроме того, что возвращают exit status ≠ 0.
говорю-же, понял я. понял. Сбило то, что в С это работало. А тут - нет. Если подумать, то и не удивительно.