如果bash变量值包含空格,则脚本会阻塞

时间:2018-09-05 20:31:39

标签: bash sh xmlstarlet

我有一个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”)

0 个答案:

没有答案