Некоторые ответы о том, как это сделать, на другом языке.Я думаю, вы хотите знать, почему ваш bash-скрипт не работает.
Основная причина в том, что когда вы устанавливаете check=1
внутри оператора if, вы находитесь в другой оболочке, поэтому он не 't влияет на check
, который определен во внешнем скрипте.Это другая оболочка, потому что вы вводите данные в другое время из другой команды.
Несколько способов сделать эту работу:
Отправить вывод конвейера grep
во временный файл, затем выполните цикл while в основном сценарии оболочки и прочитайте ввод из файла.
Вы также можете вернуть, нашли ли вы искомую строку через код выхода и сохранить ее в check
с использованием переменной $?
, в которой хранится код завершения последнего процесса.
grep -o "'[^']*'" <<<"$arr" | sed "s/'//g" |
while read -r elem; do
if [ "$search" = "$elem" ]; then
exit 1
fi
done
check=$?
Поскольку использование кода завершения в цикле while в основном превращает его в плохую версию fgrep
, вы можетепросто используйте fgrep
и проверьте код выхода.