[英]KSH: Using an array location on another array reference
I am using mksh ( mksh-50f-5.1.x86_64 ) and trying to use an element in an array as the string name in another array. 我正在使用mksh(mksh-50f-5.1.x86_64)并尝试将数组中的元素用作另一个数组中的字符串名称。
This is a small example of what I am having difficulty with. 这是我遇到困难的一个小例子。
Each array ( Array_01 -> Array_04 ) has 10 random elements. 每个数组(Array_01-> Array_04)具有10个随机元素。
There is an array ( ArrayNames ) with all 4 array names in it. 有一个包含所有4个数组名称的数组(ArrayNames)。
The outer loop will take one name from the ( ArrayNames ) but will then fail while trying to print each element in each ( Array_0? ). 外循环将从(ArrayNames)中取一个名字,但是在尝试打印每个(Array_0?)中的每个元素时将失败。
#!/bin/ksh
set -A Array_01 `shuf -i 1-100 -n 10`
set -A Array_02 `shuf -i 1-100 -n 10`
set -A Array_03 `shuf -i 1-100 -n 10`
set -A Array_04 `shuf -i 1-100 -n 10`
print ${Array_01[*]}
set -A ArrayNames Array_01 Array_02 Array_03 Array_04
integer i=0,j=0
while (( i < ${#ArrayNames[*]} ))
do
print "Array Name = [ ${ArrayNames[i]} ]"
while (( j < ${#**`echo ${ArrayNames[i]}`**[*]} ))
do
print ${`echo ${ArrayNames[j]}`[j]}
(( j = j + 1 ))
done
(( j = 0 ))
(( i = i + 1 ))
done
# ./sample.ksh
53 4 12 99 22 95 47 21 77 86
Array Name = [ Array_01 ]
./sample.ksh[29]: ${#$(echo ${ArrayNames[i]})[*]} ": bad substitution
[ Update - Tried a variant. [更新-尝试了一种变体。 ] ]
set -A TwoElements 7 8
set -A SixElements 1 2 3 4 5 6
set -A ArrayNameList TwoElements SixElements
integer i=0
print "STEP01: Contents of array TwoElements = [ ${TwoElements[*]} ]"
print "STEP02: Contents of array SixElements = [ ${SixElements[*]} ]"
while (( i < ${#ArrayNameList[*]} ))
do
CurrentArray=$( print ${ArrayNameList[${i}]} )
print "STEP03: Attempting to dump array [ $( print ${ArrayNameList[${i}]} ) ]"
print "STEP04: ${CurrentArray}"
print "STEP05: ${${CurrentArray}[*]}"
(( i = i + 1 ))
done
This is what it printed... 这是它打印的...
STEP01: Contents of array TwoElements = [ 7 8 ] STEP01:数组TwoElements的内容= [7 8]
STEP02: Contents of array SixElements = [ 1 2 3 4 5 6 ] STEP02:数组SixElements的内容= [1 2 3 4 5 6]
STEP03: Attempting to dump array [ TwoElements ] STEP03:尝试转储数组[TwoElements]
STEP04: TwoElements STEP04:TwoElements
./sample.ksh[20]: ${${CurrentArray}[*]}": bad substitution ./sample.ksh[20]:$ {$ {CurrentArray} [*]}“:错误的替换
Missing is STEP05 which should be dumping the contents of the first array name "TwoElements". 缺少STEP05,它应该转储第一个数组名称“ TwoElements”的内容。
I don't know mksh. 我不知道mksh。 But this is what I would do in ksh93. 但这就是我在ksh93中要做的。
#!/bin/ksh
set -A Array_01 `shuf -i 1-100 -n 10`
set -A Array_02 `shuf -i 1-100 -n 10`
set -A Array_03 `shuf -i 1-100 -n 10`
set -A Array_04 `shuf -i 1-100 -n 10`
print ${Array_01[*]}
set -A ArrayNames Array_01 Array_02 Array_03 Array_04
for (( i=0; i < ${#ArrayNames[*]}; i++ ))
do
print "Array Name = [ ${ArrayNames[$i]} ]"
nameref temparray=${ArrayNames[$i]}
for (( j=0; j < ${#temparray[*]}; j++ ))
do
print ${temparray[$j]}
done
done
The output gives : 输出结果为:
10 73 77 61 74 39 90 45 2 75
Array Name = [ Array_01 ]
10
73
77
61
74
39
90
45
2
75
Array Name = [ Array_02 ]
50
37
9
8
47
26
82
55
11
99
Array Name = [ Array_03 ]
13
65
66
78
15
85
96
4
33
76
Array Name = [ Array_04 ]
7
2
87
86
100
76
47
30
75
31
Hope it could help. 希望它能有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.