Использование подстановочного знака в bash-переменной для echo и grep - PullRequest
1 голос
/ 24 сентября 2019

Я пытаюсь найти функцию, которая ищет заданный файл по заданному шаблону.Если шаблон не найден, он должен быть добавлен в файл.

В некоторых случаях это работает нормально, но когда мой шаблон содержит специальные символы, такие как символы подстановки (*), этот метод завершается неудачей.

Шаблоны, которые работают:
pattern="some normal string"

Шаблоны, которые не работают:
pattern='#include "/path/to/dir/\*.conf"'

Это моя функция:

check_pattern() {
    if ! grep -q "$1" $2
    then
        echo $1 >> $2
    fi
}

Я вызываю свою функцию следующим образом:
check_pattern $pattern $target_file

При экранировании подстановочного знака в моей переменной шаблона, чтобы grep работал правильно echo интерпретирует \ как символ,

Поэтому, когда я запускаю свой скрипт во второй раз, мой grep не находит шаблон и добавляет его снова.

Проще говоря: Материал, который добавляется:
#include "/path/to/dir/\*.conf"

Материал, который я хочу добавить:
#include "/path/to/dir/*.conf"

Есть ликаким-то образом получить ожидаемый результат без сохранения моего echo -шаблонов во второй переменной?

1 Ответ

0 голосов
/ 25 сентября 2019

Спасибо всем, я получил это сейчас.

Использование grep -F, как указал Джем Тейлор, в сочетании с вызовом моей функции, как это check_pattern "$pattern" "$target_file", сделало трюки.

...