Он проверяет возвращаемое значение ($?) grep. В этом случае он сравнивает его с 0 (успех).
Обычно, когда вы видите что-то вроде этого (проверяя возвращаемое значение grep), он проверяет, была ли обнаружена конкретная строка. Хотя перенаправление на /dev/null не требуется, то же самое можно сделать с помощью -q.
Ответ 2
$? - это статус выхода последней выполненной команды; по соглашению, 0 означает успех, а что-либо еще указывает на сбой. Эта строка проверяет, выполнена ли команда grep.
В управляющей странице grep указано:
Статус выхода равен 0, если выбранные строки найдены, и 1, если не найден. Если произошла ошибка, статус выхода равен 2. (Примечание: код обработки ошибок POSIX должен проверять значение "2" или больше.)
Итак, в этом случае он проверяет, были ли найдены строки ERROR.
Ответ 3
Это чрезвычайно сложный способ проверить успех/сбой команды. Как правило, фрагмент кода, который вы даете, будет реорганизован как:
if grep -e ERROR ${LOG_DIR_PATH}/${LOG_NAME} > /dev/null; then
...
fi
(Хотя вы можете использовать "grep -q" в некоторых случаях вместо перенаправления на /dev/null, сделать это не переносимо. Многие реализации grep не поддерживают параметр -q, поэтому ваш script не работает если вы его используете.)