如何将变量中以空格分隔的两个字符串格式化为一个字符串?

How to format two strings delimited with whitespace in variable to be seen as one string?

我有一个变量,内容如下:

echo $var1
"string1 string2" "string3 string4" "string5 string6"

我希望 "string1 string2" 等被视为一个字符串,目前如果我用 awk 打印第一个字段,我会得到 '"word1'as first field, second field is 'word2"' 等等。

当我在 for 循环中使用此变量时,它不起作用,因为 for 循环不会将引号下的字符串视为一个字符串。

例如我试过:

for i in "${var1[@]}";do command to run program with arguments "$i";done

此外,当我创建另一个变量 $var2 时:

var2=("string1 string2" "string3 string4")

和 运行 它在上面的 for 循环中,有效。

我的问题是,有没有一种方法可以将 $var1 的格式设置为看起来像上面示例中的 $var2,以使其正常工作?谢谢。

注意:$var1 是获取服务名称的程序的结果。

如果您想要带引号的结果字符串,请使用

echo "$var1" | grep -Eo '"[^"]*"' | while IFS= read -r line; do
   echo "l=$line"
done

结果:

l="string1 string2"
l="string3 string4"
l="string5 string6"

没有引号:

echo "$var1" | grep -Eo '"[^"]*"' | while IFS='"' read -r x line x ; do
   echo "l=$line"
done

结果:

l=string1 string2
l=string3 string4
l=string5 string6