Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables 如何将变量中以空格分隔的两个字符串格式化为一个字符串?_Variables_Ksh - Fatal编程技术网

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时,如:

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