在 bash-shell 中迭代没有 space 作为分隔符的字符串

Iterate over string without space as seperator in bash-shell

几个小时以来我一直在尝试解析 xmllint 的一些输出,但我无法让它像我需要的那样工作。

"xmllint --xpath "//fub/@name" menu.xml"*

的输出

name="Kessel" name="Lager" name="Puffer " name="Boiler.sen" name="Boiler.jun" name="HK Senior" name="HK Junior" name="Fbh" name="Solar" name="F.Wärme" name="Sys "

现在我需要将所有名称(包括 spaces)分开并将它们放入单独的变量中。 我的方法是:

fubNames=$(xmllint --xpath "//fub/@name" menu.xml | sed 's/name=//g')
for name in $fubNames
do
    echo $name
done

但这并不能解决问题,因为 for 循环将字符串分隔在 space 上。 我需要带有 space 的名字。 (注意:有些名字最后有一个 space)

有谁知道如何正确执行此操作?

grep 方法:

xmllint --xpath "//fub/@name" menu.xml | grep -Po 'name=\K\"([^"]+)\"'

输出:

"Kessel"
"Lager"
"Puffer "
"Boiler.sen"
"Boiler.jun"
"HK Senior"
"HK Junior"
"Fbh"
"Solar"
"F.Wärme"
"Sys "

-P 选项,允许 Perl 正则表达式

-o 选项,告诉只打印匹配的部分

我建议:

xmllint --xpath "//fub/@name" menu.xml | grep -o '"[^"]*"' | while IFS= read -r name; do echo "$name"; done