由于您使用的是Bash shell(请参见您的标签),因此可以使用Bash数组轻松访问输出字符串中的各个字段。例如:
原始答案
可以这样做:
#!/bin/bash
a="$(printf "12 13 315 \n 1 2 3 4 5 6 7 8 10 2 8 9 1 0 0 2 3 4 5")"
b="$(printf "2 3 712 \n 1 23 15 12 31 23 3 2 5 6 6 1 2 3 5 51 2 3 21")"
a_array=($a)
b_array=($b)
a1="${a_array[2]}"
b1="${b_array[2]}"
echo "Output a:" $a
echo "Output b:" $b
echo "3rd from a: $a1"
echo "3rd from b: $b1"
最初的回答:这个脚本输出以下内容:
Output a: 12 13 315 1 2 3 4 5 6 7 8 10 2 8 9 1 0 0 2 3 4 5
Output b: 2 3 712 1 23 15 12 31 23 3 2 5 6 6 1 2 3 5 51 2 3 21
3rd from a: 315
3rd from b: 712
解释:
这里的诀窍是Bash中的数组常量(字面值)具有以下形式:
原始答案翻译成"最初的回答"。
(<space_separated_list_of_elements>)
最初的回答
例如
(1 2 3 4 a b c nearly_any_string 99)
任何被分配为数组的变量都会自动变成一个数组变量。在上面的脚本中,这就是在
a_array=($a)
中发生的事情:Bash将
$a
扩展为
<space_separated_list_of_elements>
,然后再次读取整个表达式,将其解释为一个数组常量。
通过使用以下形式的表达式,可以像使用变量一样引用这些数组中的单个元素:
<array_name>[<idx>]
"最初的回答":
就像一个变量名。其中,<array_name>
是数组的名称,<idx>
是引用单个元素的整数。对于由数组常量表示的数组,索引从零开始连续计算元素。因此,在脚本中,${a_array[2]}
扩展为数组a_array
中的第三个元素。如果数组元素较少,则认为a_array [2]
未设置。
您可以通过以下方式输出数组a_array
中的所有元素、相应的索引数组和数组中的元素数量:
echo "${a_array[@]}"
echo "${!a_array[@]}"
echo "${#a_array[@]}"
这些命令可用于追踪换行符的位置:在上面的脚本中,它仍然在
$a
中,可以通过以下方式看到(注意引号)。"最初的回答"
echo "$a"
which yields
12 13 315
1 2 3 4 5 6 7 8 10 2 8 9 1 0 0 2 3 4 5
但是换行符没有被包含在数组a_array
中。这是因为Bash将其视为分隔第三个和第四个元素的空格的一部分。如果换行符周围没有额外的空格,情况也是如此:
原始答案:Original Answer
12 13 315\n1 2 3 4 5 6 7 8 10 2 8 9 1 0 0 2 3 4 5
我认为你的C程序输出的形式应该是这样的。"最初的回答"