【问题标题】:How to split the string into two separate variables in shell如何在shell中将字符串拆分为两个单独的变量
【发布时间】:2018-01-31 21:47:15
【问题描述】:

我有一个字符串数组,其中包含以下数字,用空格分隔。

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 作为单个值。

已编辑

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")'

【问题讨论】:

  • 显示declare -p my_array的输出
  • 试试for each in ${my_array[@]}
  • @anubhava my_array 的输出是 S0 [ 42 4677 S10 [ 4719 1266 6020 3618 9667 8463
  • 请在您原来的问题下点击edit 并在那里更新它,而不是在难以阅读的 cmets 中。还请务必回答@anubhava 的问题并包括array2 的任何内容。
  • 试试array2+="$each"。另外,用双引号括起来"${my_array[@]}"

标签: arrays linux string bash shell


【解决方案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")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-17
    • 2017-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-15
    • 2020-04-11
    • 2021-12-11
    相关资源
    最近更新 更多