Два куска кода не сопоставимы напрямую. Ваш пример bash создает подпроцесс для запуска исполняемого файла с именем «IsThereAnyApplesLeft», ожидая завершения этого подпроцесса и сохраняя код выхода подпроцесса в переменной $? так что вы можете проверить это и действовать соответственно.
Это на самом деле довольно сложное взаимодействие, и чтобы сделать то же самое в C, потребовалось бы значительное количество кода. Вы должны были бы выполнить fork () подпроцесса, чтобы родительский wait4pid () находился в дочернем pid, в то же время в дочернем процессе вызывая execl () для файла "IsThereAnyApplesLeft", чтобы запустить его. Одним из преимуществ использования языка сценариев оболочки является то, что он скрывает подобные вещи от вас.
Для сравнения, ваш фрагмент кода C просто вызывает функцию C и сохраняет результат в локальной переменной. Это будет выглядеть в bash:
IsThereAnyApplesLeft()
{
echo 498
}
applesLeft=`IsThereAnyApplesLeft`
echo "there are $applesLeft apples left."