Почему grep не возвращает TRUE в C ++?

0

Я приспосабливаю часть своего кода от Bash к C++, и я понятия не имею, почему это всегда возвращает FALSE.

#include <iostream>
#include <stdlib.h>

int main() {
    if ( system ("grep -q zswap.enabled=1 /etc/default/grub") ) {
        std::cout << "   zswap.enabled=1 ?: Yes\n";
    }
    else {
        std::cout << "   zswap.enabled=1 ?: No\n"; 
    }
    return 0;
}
  • 0
    Сожалею. Теперь я знаю.
  • 0
    Кстати, с C ++ 11 или C ++ 14 вы можете использовать регулярные выражения ....
Показать ещё 2 комментария
Теги:

1 ответ

5
Лучший ответ

Поскольку Bash интерпретирует 0 как "успех", а C++ интерпретирует его как "ложное". Это историческая вещь, которая раздражает, но отнюдь не самая неприятная вещь, с которой вы столкнетесь при переносе длинных сценариев оболочки на C/C++.

  • 0
    Спасибо. Теперь это работает.
  • 7
    Это не просто история и не раздражает, есть очень веские причины, что 0 интерпретируется как успех. Есть только один способ, которым функция будет успешной, в то время как есть много способов, которыми она может потерпеть неудачу. Если 0 будет успешным, это означает, что когда команда терпит неудачу, вы можете знать, как она провалилась, и знать почему.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню