Bash xmlstarlet + 变量不起作用

Bash xmlstarlet + variable not work

我的代码有问题..

效果不错:

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

usercount 不更改值,我不知道为什么 :(

廉价、简单且错误的方法就是更改您的引用类型:

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

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