这是我简单的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:~$
答案 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