如何将字符串拆分为shell中的两个独立变量

时间:2017-08-23 10:39:00

标签: arrays linux string bash shell

我有一个字符串数组,其中的数字用空格分隔。

S0 [
42 4677
S10 [
4719 1266
6020 3618
9667 8463

我想将每个值分隔为整数,并将其放在一个单独的数组中 array2 = [S0,42,4677,S10,4719,1266,6020,3618,9667,843]。

我所做的是像这里给出的解决方案一样循环遍历数组

  

How to split one string into multiple strings separated by at least one space in bash shell?

对于数组的每个元素但它似乎不起作用。

for each in ${my_array[1]}
do
echo $each
done

始终将输出42 4677作为单个值。

  

EDITED

for each in ${my_array[@]}
do
echo $each 
done    

declare -a array2
for each in ${my_array[@]}
do
    array2=$each
done 

echo ${array2[1]}

declare -p my_array 

现在第一个for循环正常工作但是现在当我在第二个循环中将my_array的值赋给array2时,只有最后一个字符串的最后一个值被分配给它8463

declare -p my_array的内容是 declare -a my_array='([0]="S0 [" [1]="42 4677" [2]="S10 [" [3]="4719 1266" [4]="6020 3618" [5]="9667 8463")'

1 个答案:

答案 0 :(得分:1)

您可以使用:

declare -a my_array='([0]="S0 [" [1]="42 4677" [2]="S10 [" [3]="4719 1266" [4]="6020 3618" [5]="9667 8463")'

array2=()

for i in ${my_array[@]}; do
   [[ $i == *[0-9]* ]] && array2+=($i)
done

# check content of array2
declare -p array2
declare -a array2=([0]="S0" [1]="42" [2]="4677" [3]="S10" [4]="4719" [5]="1266" [6]="6020" [7]="3618" [8]="9667" [9]="8463")