Я пытаюсь найти функцию, которая ищет заданный файл по заданному шаблону.Если шаблон не найден, он должен быть добавлен в файл.
В некоторых случаях это работает нормально, но когда мой шаблон содержит специальные символы, такие как символы подстановки (*), этот метод завершается неудачей.
Шаблоны, которые работают:
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
-шаблонов во второй переменной?