Bash xmlstarlet +变量不起作用

时间:2016-06-07 20:09:53

标签: bash variables xmlstarlet

我的代码有问题..

工作正常:

xmlstarlet ed --inplace -u '//data[irc="Blablabla"]/usercount' -v $count myfile.xml

但那不是:

variable="Blablabla"    
xmlstarlet ed --inplace -u '//data[irc="$variable"]/usercount' -v $count myfile.xml

用户数量不会改变价值,我不知道原因:(

1 个答案:

答案 0 :(得分:1)

便宜,简单和错误的方法只是改变你的报价类型:

variable="Blablabla" 
xmlstarlet ed --inplace \
  -u "//data[irc=\"$variable\"]/usercount" \
  -v "$count" \
  myfile.xml

...也就是说,将-u 'foo'中的单引号更改为双引号,如-u "foo"中所示。

最佳做法是将shell变量作为XPath变量传递,然后在查询中使用它:

variable="Blablabla" 
xmlstarlet ed --inplace \
  --var variable "'$variable'" \
  -u '//data[irc=$variable]/usercount' \
  -v "$count" \
  myfile.xml

这避免了混合代码和数据 - 这种做法几乎是所有注射漏洞的根本原因。