通配符表达式比较不起作用

Wildcard expression comparison not working

我需要比较输入文件的第二行是否包含字符串 premium-world-check.xsd。如果它存在,我不需要做任何事情。 如果它不存在,我需要添加到另一个文件。

我有以下输入文件,

<?xml version="1.0" encoding="UTF-8"?>
<records xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="premium-world-check.xsd">
<record category="INDIVIDUAL">
<tag1>
<tag2>
....
</tag2>
</tag1>

下面是我的代码,

xsdFlag=`sed -n '2p' ${myInputFile}`
if [ $xsdFlag == *"premium-world-check.xsd"* ]
then
    echo "Prepending not required"
else
    echo "<records xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="premium-world-check.xsd">" | cat - ${myInputFile} > wcTemp.xml && mv wcTemp.xml ${myInputFile}
    echo "<?xml version="1.0" encoding="UTF-8"?>" | cat - ${myInputFile} > wcTemp.xml && mv wcTemp.xml ${myInputFile}
    echo "PREPENDING:"
fi

在我的 if 条件下,我得到了未知的运算符。

这样试试;我做了一些修复。

xsdFlag=`sed -n '2p' "$myInputFile"`

if [[ "$xsdFlag" == *"premium-world-check.xsd"* ]]; then
    echo "Prepending not required"
else
    echo '<records xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="premium-world-check.xsd">' | cat - "$myInputFile" > wcTemp.xml && mv wcTemp.xml "$myInputFile"
    echo '<?xml version="1.0" encoding="UTF-8"?>' | cat - "$myInputFile" > wcTemp.xml && mv wcTemp.xml "$myInputFile"
    echo "PREPENDING:"
fi

一个问题是使用标准 POSIX [ ... ] 而不是 Bash [[ ... ]],您需要使用通配符。

另一个问题是您没有转义 XML 字符串中的引号。我将外引号从双引号更改为单引号以解决此问题。

您也没有引用您的文件名,这是防止文件包含空格时出错的必要条件。