从命令行,以下命令可以正常工作:
回声' 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
任何人都可以帮助我吗?
答案 0 :(得分:0)
您需要echo
上的双引号(也应该在y
作业中使用双引号)
y="$1"
echo "cat //volume_trustees/*[contains(translate(.,$up,$lo),$lo)]" | xmllint --shell /path/database.xml
在echo
中包含single-quotes
字符串会阻止$up,$lo and $lo
的扩展。