[英]Unix Shell scripting (KSH)
Can we create dynamic arrays in Ksh? 我们可以在Ksh中创建动态数组吗? like, can we create array_$i[] arrays where i ranges from 1 to 5? 像,我们可以创建我范围从1到5的array_ $ i []数组吗? ie, array_1[], array_2[],array_3[], array_4[] and array_5[] 即array_1 [],array_2 [],array_3 [],array_4 []和array_5 []
so that I can iterate through array_$i. 这样我就可以遍历array_ $ i。 Is that possible in ksh? 在ksh中可能吗?
You can do it with eval
你可以用eval
做到
eval array_$i'[$j]=$val'
eval 'echo $array_'$i
In ksh93, you can create compound variables. 在ksh93中,您可以创建复合变量。 These are really hashes, not arrays, but can be used as such, when using numeric indexes. 这些实际上是哈希,而不是数组,但是在使用数字索引时可以照常使用。
$ $ echo $KSH_VERSION
Version JM 93u 2011-02-08
$ a[1][1]=foo
$ a[3][1]=bar
$ print -C a
([1]=([1]=foo) [3]=([1]=bar) )
$ print -v a
(
[1]=(
[1]=foo
)
[3]=(
[1]=bar
)
)
$ print ${a[1][1]}
foo
$ print ${a[3][1]}
bar
To develop more Bamar's answer here is an example of how those "arrays" could be used in ksh: 为了获得更多Bamar的答案,这里是如何在ksh中使用这些“数组”的示例:
#!/usr/bin/ksh
#--------------------------------------
# populate arrays
for i in 1 2 3 4 5 ; do # here we will define/use 5 arrays
count=$RANDOM%10 # random array size up to 10 elements
while [[ $count -gt 0 ]]; do
let count=$count-1
eval my_arrays_${i}[$count]=$RANDOM # assigning some random numbers to the array elements
done
done
#--------------------------------------
# display arrays content
for i in 1 2 3 4 5 ; do
idx=0
arr_name=my_arrays_${i}
arr_name_cnt="\${#$arr_name[*]}"
eval count=$arr_name_cnt # getting the array count of elements
echo "Array $arr_name has $count elements"
while [[ $idx -lt $count ]]; do # loop over array elements
arr_elem="\${${arr_name}[$idx]}"
eval arr_elem=$arr_elem # getting the actual value of the array element
echo "Element $idx: < $arr_elem > "
let idx+=1
done
done
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.