我正在尝试创建一个包含参数的xmlstarlet命令变量:
WARNING=$(xmlstarlet ed --inplace -u "'"/programs/program/log/@level"'" -v 4 ${FILE})
不幸的是,如果没有双引号或单引号,即使xmlstarlet也不接受/看到该元素。
欢迎在命令中包含引号作为输出的任何帮助:)
谢谢。 AL
答案 0 :(得分:1)
声明在此表达式中需要字面引号以便XMLStarlet找到所需元素。
相反,当您在 select 命令(或传统编辑)的上下文中捕获stdout时,您正在运行就地编辑命令将替换文本发送到stdout);对于就地编辑,stdout将为空。
如果您的目标是捕获与就地编辑操作相关联的stderr:
warnings=$(xmlstarlet ed --inplace -u "/programs/program/log/@level" -v 4 "$file" 2>&1)
...将stderr复制到stdout,确保它被捕获。
那就是说,如果你抓住warnings
的目标是检查成功,不要依赖于查看stderr;相反,请检查退出状态:
if warnings=$(xmlstarlet ed --inplace ... 2>&1); then
echo "Update succeeded" >&2
else
echo "Update failed: $warnings" >&2
fi