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
这避免了混合代码和数据——这种做法是几乎所有类型的注入漏洞的根本原因。
我的代码有问题..
效果不错:
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
这避免了混合代码和数据——这种做法是几乎所有类型的注入漏洞的根本原因。