Почему не "эхо $?" вывести код выхода команды прямо перед ней, пока она используется в "&&"?

Предположим, у меня есть эта простая программа на 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 ответ

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

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

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

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

Обратите внимание, что он может сообщить код выхода gcc если это не ноль.

Другие вопросы по тегам