如何将变量中以空格分隔的两个字符串格式化为一个字符串?
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
- 这不起作用,因为程序 运行ned 带有 '"string1 参数,而它应该 运行 带有 '"string1 string2" 参数。
此外,当我创建另一个变量 $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
我有一个变量,内容如下:
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
- 这不起作用,因为程序 运行ned 带有 '"string1 参数,而它应该 运行 带有 '"string1 string2" 参数。
此外,当我创建另一个变量 $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