У меня есть строковая переменная в файле сценария bash, как показано ниже:
string="
test1
test2
"
и Я хочу проверить, содержит ли файл test.txt
эту конкретную строку (включая разрывы строк. Т.е. он должен завершиться ошибкой, если он содержит только следующее:
this is a test:
test1
test2
and another one
, потому что разрывы строк выше test1 и ниже test2 не присутствует.
(Причина, по которой я хочу это проверить, состоит в том, что я хочу проверить, есть ли определенный фрагмент кода в исходном файле, а если нет, добавить его.)
Следующее не работает:
string="
test1
test2
"
if ! grep -q string "test.txt"; then
echo "$string" >> test.txt
fi
Это правильно добавляет строку в файл, но делает это, даже если строка уже была добавлена. Кроме того, он работает правильно, когда я изменяю строку, чтобы в ней не было разрывов.
РЕДАКТИРОВАТЬ:
Ответы автора @terdon и @steeldriver ниже работают для примера строки, который я написал выше, но по какой-то причине они не подходят для этого более реалистичного примера:
string="
if [ -f ~/.script ]; then
. ~/.script
fi
"