Shell脚本:如何将循环输出保存到数组

时间:2017-11-03 19:22:54

标签: arrays shell for-loop

这是我简单的shell脚本。目标是拆分字符串" RANDOM948"作为数组,以便我可以操作字符串中的任何字符" RANDOM948"。

ubuntu@Ubuntu:~$ cat -n longscript.sh 
     1  string="RANDOM948"
     2
     3  c1=${string:0:1}
     4  c2=${string:1:1}
     5  c3=${string:2:1}
     6  c4=${string:3:1}
     7  c5=${string:4:1}
     8  c6=${string:5:1}
     9  c7=${string:6:1}
    10  c8=${string:7:1}
    11  c9=${string:8:1}
    12              
    13  echo $c9 $c4 $c1
ubuntu@Ubuntu:~$ 

ubuntu@Ubuntu:~$ ./longscript.sh 
8 D R
ubuntu@Ubuntu:~$ 

我相信使用for循环可以简化这一过程。这是我的尝试。但是,我不知道如何将循环输出保存为数组。

ubuntu@Ubuntu:~$ cat -n testscript.sh 
     1  string="RANDOM948"
     2
     3  for i in {1..9}
     4  do
     5   echo c$i=$\{string:`expr $i - 1`:1}
     6  done
     7
     8  # echo $c9 $c4 $c1
ubuntu@Ubuntu:~$ 

ubuntu@Ubuntu:~$ ./testscript.sh 
c1=${string:0:1}
c2=${string:1:1}
c3=${string:2:1}
c4=${string:3:1}
c5=${string:4:1}
c6=${string:5:1}
c7=${string:6:1}
c8=${string:7:1}
c9=${string:8:1}
ubuntu@Ubuntu:~$ 

更新:@sos

建议的新代码

我已用新行(5& 6)更新了此代码,但它仍然无法正常工作

ubuntu@Ubuntu:~$ cat -n testscript.sh 
     1  string="RANDOM948"
     2
     3  for i in {1..9}
     4  do
     5   typeset -a c
     6   c[${i}]=$\{string:`expr $i - 1`:1}
     7  done
     8
     9  echo TEST OUTPUT $c9 $c4 $c1
ubuntu@Ubuntu:~$ 
ubuntu@Ubuntu:~$ 
ubuntu@Ubuntu:~$ ./testscript.sh 
TEST OUTPUT
ubuntu@Ubuntu:~$ 

3 个答案:

答案 0 :(得分:1)

替换

    echo c${i}

    typeset -a c       # declare a indexed array
    c[${i}]=...

答案 1 :(得分:1)

如果您通过使用shebang行来识别正在运行脚本的内容,那么您将自己和其他人一个忙

#!/bin/bash

作为脚本的第一行。在任何情况下,以下示例都可以帮助您。

cat ./looptest.sh

请注意#!行....

#!/bin/bash
for i in {0..9}
do
  myArray[$i]="hello_$i"
  echo set the value of myArray[$i]
done
echo the value of myArray[4] is ${myArray[4]}

这是输出:

set the value of myArray[0]
set the value of myArray[1]
set the value of myArray[2]
set the value of myArray[3]
set the value of myArray[4]
set the value of myArray[5]
set the value of myArray[6]
set the value of myArray[7]
set the value of myArray[8]
set the value of myArray[9]
the value of myArray[4] is hello_4

答案 2 :(得分:1)

这是我得到的

    set -x
    for i in {1..9}
      do
        c[${i}]=${string:`expr $i - 1`:1}
     done
    set +x

    + expr 1 - 1
    + c[1]=R
    + expr 2 - 1
    + c[2]=A
    + expr 3 - 1
    + c[3]=N
    + expr 4 - 1
    + c[4]=D
    + expr 5 - 1
    + c[5]=O
    + expr 6 - 1
    + c[6]=M
    + expr 7 - 1
    + c[7]=9
    + expr 8 - 1
    + c[8]=4
    + expr 9 - 1
    + c[9]=8

注意:它被认为是"不寻常的"开始数组索引为1而不是0