Parece que $LINE
contém um valor que começa com um traço.
Você pode proteger contra isso com
grep -q -e "$LINE"
Mais geralmente, a maioria dos comandos Unix permite que --
marque o fim das opções, e assim qualquer argumento após essa opção "fim de opções" será considerado como um argumento literal, sem opção.
echo
terá um problema também; a solução portátil é mudar para printf
, que funciona bem com argumentos que começam com traços, desde que não seja o primeiro argumento, que é uma string de formato.
Você também deve evitar usar nomes de variáveis maiúsculas; estes são reservados para uso do sistema.
Por fim, os scripts quase nunca precisam examinar explicitamente $?
- isso já é feito por if
, while
e outras construções de controle.
if grep -q -e "$line" log.log; then
printf '%s\n' "$line"
fi
Como uma otimização, colocar o redirecionamento fora do loop tornará as coisas muito mais rápidas.
while read -r line; do
grep -q -e "$line" log.log && printf '%s\n' "$line"
done <results.txt >notfound.txt