我的代码有问题..
工作正常:
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
用户数量不会改变价值,我不知道原因:(
答案 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
这避免了混合代码和数据 - 这种做法几乎是所有注射漏洞的根本原因。