测试文件中是否存在特定 xml 字符串

Test if specific xml string exists in a file

我想测试 xml header 是否存在于指定文件中。

我正在使用类似的东西:

FILE=
PATTERN="<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>"
if grep -Fxq ${PATTERN} ${FILE}
then
    echo "already exists"
else
    echo "not exists"
fi

但是 returns :

grep: version="1.0": No such file or directory
grep: encoding="UTF-8": No such file or directory
grep: standalone="no"?>: No such file or directory
not exists

但是,PATTERN 已存在于文件中。基本上我不想创建一个新的 PATTERN 行,如果它已经存在于指定的文件中。

用双引号括起 ${PATTERN}"${PATTERN}"

以下应该有效:

FILE=
PATTERN="<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>"
if grep -Fxq "${PATTERN}" ${FILE}
then
    echo "already exists"
else
    echo "not exists"
fi

没有引号的情况是 if 命令扩展为 grep -Fxq <?xml version....version,而其他部分被解释为参数,因此 grep 将搜索相应的文件,这当然不存在