bash: $? == 0 after assignment? (а так же после echo и т.п.)

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

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

Ответить
-error
Сообщения: 174
Статус: sysadmin / oracle dba
ОС: HP-UX :-)

bash: $? == 0 after assignment?

Сообщение -error »

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

[sergey@freebsd ~/work]$ cat test.sh
#!/usr/local/bin/bash
function always_false() { return 1; }

always_false
res=$?
echo "\$?=$?, \$res=$res"
[sergey@freebsd ~/work]$ bash test.sh
$?=0, $res=1


или я чего-то не понимаю?
Спасибо сказали:
Аватара пользователя
Славик
Сообщения: 159
ОС: AltLinux2.4 master

Re: bash: $? == 0 after assignment?

Сообщение Славик »

-error писал(а):
13.09.2007 10:07

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

[sergey@freebsd ~/work]$ cat test.sh
 #!/usr/local/bin/bash
 function always_false() { return 1; }

 always_false
 res=$?
 echo "\$?=$?, \$res=$res"
 [sergey@freebsd ~/work]$ bash test.sh
 $?=0, $res=1


или я чего-то не понимаю?


$? содержит соотояние завершения последней выполненной команды, которая была res=$? и выполнилась успешно.
Поэтому всё правильно.
Познание бесконечности требует бесконечного времени.
А. и Б. Стругацкие
Понедельник начинается в субботу
Спасибо сказали:
-error
Сообщения: 174
Статус: sysadmin / oracle dba
ОС: HP-UX :-)

Re: bash: $? == 0 after assignment?

Сообщение -error »

к сожалению, не могу найти прямого указания на такую особенность.
Спасибо сказали:
Аватара пользователя
Славик
Сообщения: 159
ОС: AltLinux2.4 master

Re: bash: $? == 0 after assignment?

Сообщение Славик »

-error писал(а):
13.09.2007 10:35
к сожалению, не могу найти прямого указания на такую особенность.


1) man bash
2) Advanced Bash-Scripting Guide поспрашивай у гугля, где скачать.

Если есть - читай внимательно про завершение и код завершения.
Познание бесконечности требует бесконечного времени.
А. и Б. Стругацкие
Понедельник начинается в субботу
Спасибо сказали:
-error
Сообщения: 174
Статус: sysadmin / oracle dba
ОС: HP-UX :-)

Re: bash: $? == 0 after assignment?

Сообщение -error »

пожалуйста, точные строки для поиска в bash(1) и ссылку в ABS.
Спасибо сказали:
Аватара пользователя
Славик
Сообщения: 159
ОС: AltLinux2.4 master

Re: bash: $? == 0 after assignment?

Сообщение Славик »

В Bash(1) смотри специальные параметры, там увидишь, а в ABS глава так и называется Завершение и код завершения
в оглавлении на первой странице (если по моей ссылке)
Познание бесконечности требует бесконечного времени.
А. и Б. Стругацкие
Понедельник начинается в субботу
Спасибо сказали:
-error
Сообщения: 174
Статус: sysadmin / oracle dba
ОС: HP-UX :-)

Re: bash: $? == 0 after assignment?

Сообщение -error »

в указанном разделе ABS сказано "Every command returns an exit status", но в разделе "4.2. Variable Assignment" говорится о "the assignment operator".
в bash(1) говорится
? Expands to the status of the most recently executed foreground pipeline.

про присваивание опять же
A variable may be assigned to by a statement of the form

name=[value]


получается - "недокументированная особенность"?
Спасибо сказали:
Аватара пользователя
Славик
Сообщения: 159
ОС: AltLinux2.4 master

Re: bash: $? == 0 after assignment?

Сообщение Славик »

-error писал(а):
13.09.2007 11:10
в указанном разделе ABS сказано "Every command returns an exit status", но в разделе "4.2. Variable Assignment" говорится о "the assignment operator".

это из ABS
Каждая команда возвращает код завершения (иногда код завершения называют возвращаемым значением ). В случае успеха команда должна возвращать 0, а в случае ошибки -- ненулевое значение, которое, как правило, интерпретируется как код ошибки. Практически все команды и утилиты UNIX возвращают 0 в случае успешного завершения...


? Expands to the status of the most recently executed foreground pipeline.

про присваивание опять же
A variable may be assigned to by a statement of the form

name=[value]


Выдержка из моего man bash

Конвейер - это последовательность одной или более команд...


получается - "недокументированная особенность"?


всё прекрасно документировано ;)
Познание бесконечности требует бесконечного времени.
А. и Б. Стругацкие
Понедельник начинается в субботу
Спасибо сказали:
-error
Сообщения: 174
Статус: sysadmin / oracle dba
ОС: HP-UX :-)

Re: bash: $? == 0 after assignment?

Сообщение -error »

command и operator. "feel the difference" :-)
ладно. обсуждение, я полагаю, можно свернуть.
Спасибо сказали:
Аватара пользователя
Славик
Сообщения: 159
ОС: AltLinux2.4 master

Re: bash: $? == 0 after assignment?

Сообщение Славик »

:crazy: Меня эта фича тоже с толку сбила. Национальные особенности пингвинов :blush:

Bash is an sh-compatible command language interpreter that execute commands read from the standard input or from a file.

Всё, что прочитано со стандартного ввода или из отдельной строки исполняемого файла есть команда.
Поэтому, когда сталкиваешся с неясностями или неожиданными результатами, почти всё можно проверить прямо в командной строке.

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

 [slavik@mycomp slavik]$ $((12/0))
 bash: 12/0: division by 0 (error token is "0")
 [slavik@mycomp slavik]$ res=$?
 [slavik@mycomp slavik]$ echo "\$?=$?"
 $?=0
 [slavik@mycomp slavik]$ echo "\$res=$res"
 $res=1
Познание бесконечности требует бесконечного времени.
А. и Б. Стругацкие
Понедельник начинается в субботу
Спасибо сказали:
Ответить