将xmlstarlet的输出赋值给变量bash中的命令

3
wget ${RSS_URL} -O - 2>/dev/null | xmlstarlet sel -t -m "/rss/channel/item" -v "title" -n -v "link" -n -n

这行代码会打印出我订阅的RSS源中每个条目的标题(-v“title”)和URL(-v“link”)。

我想把标题和URL分别存储到不同的变量(例如$title和$url),以便稍后可以在curl中使用它们。

2个回答

3
运行xmlstarlet两次,一次获取每个需要的信息。
为了提高效率,您应该将URL下载到本地文件(只需一次wget),然后在该文件上运行xmlstarlet
title=$(xmlstarlet sel -t -m "/rss/channel/item" -v "title" local.xml)
link=$(xmlstarlet sel -t -m "/rss/channel/item" -v "link" local.xml)

我建议采用这种方法,因为它可以很好地处理元素中的空格和换行符。

注意:为了优化这个过程,你可以先对XML输入进行过滤,生成一个只包含所需信息的新XML文件,然后再运行xmlstarlet将其拆分成变量。


嗯,实际上这确实给了我一个问题。$title 现在获取了 RSS 源中所有条目的标题,$url 也获取了所有条目的 URL。我只想获取最新条目的标题和 URL。 - qwerty1911
1
对于最后一个条目,请将xpath表达式修改为“/rss/channel/item[position() = last()]”。 - tvm
太棒了,tvm。非常感谢。 - qwerty1911

1

或者你可以使用Bash的“read”内置函数一次性为多个变量赋值:

$ read title link <(wget ${RSS_URL} -O - 2>/dev/null | xmlstarlet sel -t -m "/rss/channel/item" -v "title" -o " " -v "link")
$ echo $title
$ echo $link

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接