我有一个bash脚本来解析一个看起来像这样的xml文件(名称:myFile.xml):
<?xml version="1.0" encoding="utf-8"?>
<params>
<username>jDoe</username>
<password>123abc</password>
<fullname>John Doe</fullname>
<email>johndoe@example.com</email>
<phone>1234567890</phone>
<country>Italy</country>
</params>
在该bash脚本中,我将xml文件的每个值解析为一个变量以供进一步使用。到目前为止,bash脚本看起来像这样:
for i in $(xmlstarlet select --template --match "//params/*" --value-of "concat(name(),'=\"',text(),'\"')" -n myFile.xml)
do
eval $i
done
#debugging:
echo $username
echo $fullname
echo $password
运行此脚本时
./myScript.sh
我得到以下输出:
./myScript.sh: eval: line 34: unexpected EOF while looking for matching `"'
./myScript.sh: eval: line 35: syntax error: unexpected end of file
./myScript.sh: eval: line 34: unexpected EOF while looking for matching `"'
./myScript.sh: eval: line 35: syntax error: unexpected end of file
jDoe
123abc
显然,因为标签<fullname>
的值是2个单词,这些单词之间用空格隔开,因此脚本很容易出错。如果我将其值“ John Doe”替换为另一个(没有空格),例如:“ JohnDoe”或“ John_Doe”,则脚本可以正常工作!
关于如何将包含空格的值传递给bash变量的任何建议?
当然,我想保持循环,因为 1.实际脚本中有太多参数 和2.参数并不总是相同的(它们从一个xml文件到另一个xml文件有所不同)...
(简而言之,这就是我想要实现的:fullname =“ John Doe”)