我在 bash 脚本文件中有一个字符串变量,如下所示:
string="
test1
test2
"
Run Code Online (Sandbox Code Playgroud)
我想检查一个文件是否test.txt包含这个特定的字符串(包括换行符。即,如果它只包含以下内容,它应该失败:
this is a test:
test1
test2
and another one
Run Code Online (Sandbox Code Playgroud)
因为 test1 上方和 test2 下方的换行符不存在。
(我之所以要检查这个是因为我想检查某段代码是否在源文件中,如果没有,则添加它。)
以下不起作用:
string="
test1
test2
"
if ! grep -q string "test.txt"; then
echo "$string" >> test.txt
fi
Run Code Online (Sandbox Code Playgroud)
这可以正确地将字符串添加到文件中,但即使已经添加了该字符串,它也会执行此操作。此外,当我将字符串更改为没有换行符时,它会正确执行。
编辑:
下面@terdon 和@steeldriver 的答案适用于我上面写的字符串示例,但由于某种原因,它们不适用于这个更实际的示例:
string="
if [ -f ~/.script ]; then
. ~/.script
fi
"
Run Code Online (Sandbox Code Playgroud)