2

Предположим, у меня есть эта простая программа на C, которая возвращает 4 в оболочку.

int main()
{
  return 4;
}

Когда я его запускаю, тогда делаю echo $? Я бы получил 4 , что ожидается

$ gcc foo.c && ./a.out
$ echo $?
4               <<<< expected

НО, когда я делаю следующее, я ничего не получаю

$ gcc foo.c && ./a.out && echo $?
$             <<<< Nothing - WHY????

1 ответ1

5

&& запускает второй аргумент только в том случае, если первый аргумент был успешным, т.е. если он завершился с кодом выхода 0. Код выхода 4 означает "сбой" для оболочки, поэтому echo не выполняется. Пытаться

gcc foo.c && ./a.out || echo $?

Если вы хотите увидеть код выхода только тогда, когда он не равен нулю. Если вы хотите видеть это всегда, используйте

gcc foo.c && ./a.out ; echo $?

Обратите внимание, что он может сообщить код завершения gcc если он не равен нулю.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .