通配符表达式比较不起作用
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 字符串中的引号。我将外引号从双引号更改为单引号以解决此问题。
您也没有引用您的文件名,这是防止文件包含空格时出错的必要条件。
我需要比较输入文件的第二行是否包含字符串 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 字符串中的引号。我将外引号从双引号更改为单引号以解决此问题。
您也没有引用您的文件名,这是防止文件包含空格时出错的必要条件。