从命令行,以下命令可以正常工作:
echo 'cat //volume_trustees/*[contains(translate(.,"SMITH","smith"),"smith")]' | xmllint --shell /path/database.xml
但我想将其放入 shell 脚本中,并以搜索项作为参数。 但我不知道如何让它发挥作用:
y=$1
up="$(echo $y | tr 'A-Z' 'a-z')"
lo="$(echo $y | tr 'a-z' 'A-Z')"
echo 'cat //volume_trustees/*[contains(translate(.,$up,$lo),$lo)]' | xmllint --shell /path/database.xml
这会显示以下错误消息:
xmlXPathCompOpEval: parameter error
XPath error : Stack usage errror
XPath error : Invalid operand
XPath error : Stack usage errror
XPath error : Invalid type
xmlXPathEval: 1 object left on the stack
//volume_trustees/*[contains(translate(.,$up,$lo),$lo)]: no such node
谁能帮帮我吗?
最佳答案
您需要在 echo
上加双引号(也应该在 y
赋值上使用双引号)
y="$1"
echo "cat //volume_trustees/*[contains(translate(.,$up,$lo),$lo)]" | xmllint --shell /path/database.xml
将 echo
字符串括在单引号
中可防止 $up、$lo 和 $lo
扩展。
关于linux - 如何从xml文件中获取特定数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27035674/