Вывод Вывод команды в командную строку напрямую, НЕ переменная [дубликат]

Похоже, что $LINE содержит значение, начинающееся с тире.

Вы можете защититься от этого с помощью

grep -q -e "$LINE"

В общем случае, большинство команд Unix позволяют -- отмечать конец опций, и поэтому любой аргумент после этой опции "конец опций" будет восприниматься как буквальный аргумент без опций.

echo тоже будет иметь проблему; переносимое решение - перейти на printf, который отлично работает с аргументами, начинающимися с тире, если только это не первый аргумент, который является строкой формата.

Вы также должны избегать использования имен переменных в верхнем регистре; они зарезервированы для системного использования.

Наконец, сценариям почти никогда не нужно явно проверять $? - это уже сделано if, while и другими управляющими конструкциями.

if grep -q -e "$line" log.log; then
    printf '%s\n' "$line"
fi

В качестве оптимизации, если поместить перенаправление за пределы цикла, то все будет происходить намного быстрее.

while read -r line; do
    grep -q -e "$line" log.log && printf '%s\n' "$line"
done <results.txt >notfound.txt
5
06.07.2015, 01:32
0 ответов

Теги

Похожие вопросы