Nano Hash - криптовалюты, майнинг, программирование

Терминал. Почему команда выхода из grep равна 0, даже если совпадение не найдено?

У меня есть эта команда:

grep -E '^nothing' List.txt | echo $?

Здесь grep ничему не соответствует, и я просто вывожу его код выхода. Согласно документации grep:

Обычно статус выхода равен 0, если линия выбрана, 1, если строки не выбраны, и 2, если произошла ошибка. Однако, если используется опция -q или --quiet или --silent и выбрана строка, статус выхода равен 0, даже если произошла ошибка. Другие реализации grep могут выйти со статусом больше 2 в случае ошибки.

Но:

prompt:user$ grep -E '^nothing' List.txt | echo $?
0
prompt:user$

Но почему я получаю 0 в качестве вывода, даже если совпадение не существует, разве я не должен получить ожидаемый код выхода 1?


  • Замените | на ;. 01.12.2014
  • Чего вы пытаетесь достичь в любом случае? Обычная идиома if grep -qE '^nothing' list.txt; then ... 01.12.2014
  • Да, я использую grep в сценарии bash. 01.12.2014

Ответы:


1

Это проблема:

grep -E '^nothing' List.txt | echo $?

Используя одиночный |, вы отправляете вывод grep в echo, который всегда будет печатать статус выхода предыдущей команды, и это всегда будет 0, независимо от того, найден шаблон или нет.

Вы можете использовать grep -q:

grep -qE '^nothing' List.txt

Согласно man grep:

 -q, --quiet, --silent
         Quiet mode: suppress normal output.  grep will only search a file until a match
         has been found, making searches potentially less expensive.
01.12.2014
  • Благодарю за ваш ответ! Оно работает. Просто уточнение. Когда вы говорите which will always print exit status of previous command and that will always be 0 whether pattern is found or not., но если шаблон не найден, greps завершается с единицей, так не должна ли она быть единицей? 01.12.2014
  • grep -E '^nothing' List.txt | echo $? выводит статус выхода команды, которая была выполнена до grep, а не этой grep команды. 01.12.2014
  • Хорошо, спасибо, это было то, что мне нужно было понять! 01.12.2014
  • grep -s рекомендуется вместо -q для совместимости с Posix. 18.02.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..