简体   繁体   English

KSH:在另一个数组引用上使用数组位置

[英]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. [更新-尝试了一种变体。 ] ]

!/bin/ksh !/ bin / ksh

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM