Variables 如何将变量中以空格分隔的两个字符串格式化为一个字符串?
我有一个变量,其内容如下:Variables 如何将变量中以空格分隔的两个字符串格式化为一个字符串?,variables,ksh,Variables,Ksh,我有一个变量,其内容如下: echo $var1 "string1 string2" "string3 string4" "string5 string6" 我希望将“string1 string2”等视为一个字符串,当前如果我使用awk打印第一个字段,我会得到“word1”作为第一个字段,第二个字段是“word2”,依此类推 当我在for循环中使用此变量时,它不起作用,因为for循环不会将引号下的字符串视为一个字符串 例如,我尝试: for i in "${var1[@]}";do comm
echo $var1
"string1 string2" "string3 string4" "string5 string6"
我希望将“string1 string2”等视为一个字符串,当前如果我使用awk打印第一个字段,我会得到“word1”作为第一个字段,第二个字段是“word2”,依此类推
当我在for循环中使用此变量时,它不起作用,因为for循环不会将引号下的字符串视为一个字符串
例如,我尝试:
for i in "${var1[@]}";do command to run program with arguments "$i";done
- 这不起作用,因为程序是使用“”string1参数运行的,而它应该使用“”string1 string2”参数运行
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"
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"
l=string1 string2
l=string3 string4
l=string5 string6
请检查;我们至少要查找您尝试过的代码、您当前生成的(错误)输出以及(良好的)您希望生成的预期输出知道吗,这实际上是有效的。但是有一个问题,-o选项在grep中起到了什么作用?我正在将AIX与ksh和bash 4.2一起使用,所以-o选项不起作用
-o
选项不返回匹配的整行,而只返回匹配的字符串。我使用它将行拆分为不同的行,每个行只返回一个quoted字符串。我不知道您是如何在没有grep-Eo的情况下让它工作的,也许您做了类似$echo'11”“2”“3”“sed-r's/“[^”]*”/\n/g'|;而IFS=”“'read-rx line x;do test-n$line”和&echo'l=$line”的操作完成了(或者当您的sed
不支持\n
时,用真正的换行符替换\n
)。我只使用了您的命令,没有-o选项,其他一切都保持不变。echo“$var1”| grep-E'[^”]*”|而IFS=''read r x line x;do echo“Deleted line:$line\n”;done