Часто немедленным ответом будет «использовать $(...)
». Но, следуя вашему примеру, это будет неправильный ответ, потому что это будет путать вывод с состоянием выхода - вы сравниваете что-то с 0, так что «что-то» должно быть состоянием выхода.
Примечание: вы также путаете ввод с аргументами команды. Когда grep задаются дополнительные аргументы, он ожидает, что они будут файлами, а не прямыми строками. Вам нужно echo "$output" | grep -q "Correct"
если у вас есть строковая переменная без соответствующего файла.
Вернуться к состоянию выхода. Статус хранится в $?
переменная (пока следующая команда не перезапишет это):
echo $output | grep -q "Correct"
if [ $? -eq 0 ]; then
echo "OK!"
fi
Или используя синтаксис bash:
echo $output | grep -q "Correct"
if (( $? == 0 )); then
echo "OK!"
fi
Но это немного избыточно, потому что сравнение состояния выхода с 0 - это то, что, if
уже делает все время. Это [
не специальный синтаксический элемент - это просто команда, которая завершается с 0, если сравнение прошло успешно. Вы также можете использовать любую другую команду вместо нее:
if echo $output | grep -q "Correct"; then
echo "OK!"
fi
Наконец, вам не нужен grep - вы можете напрямую проверить содержимое переменной. В настоящее время вы проверяете, встречается ли слово "Исправить" где-либо в строке - это можно переопределить, используя bash [[
wildcard match:
if [[ $output == *Correct* ]]; then
(То же самое можно сделать в чистом sh, используя case $output in ...
)
И если строка всегда точно соответствует слову "Правильно" или нет, это еще проще:
if [[ $output == Correct ]]; then
if [ "$output" = Correct ]; then