Unix Shell scripting (KSH)



我们可以在ksh中创建动态数组吗?就像,我们可以创建阵列_ $ i []阵列,范围从1到5?即array_1 [],array_2 [],array_3 [],array_4 []和array_5 []

,我可以通过array_ $ i迭代。在ksh?

中是否可以

您可以使用eval

进行操作
eval array_$i'[$j]=$val'
eval 'echo $array_'$i

在ksh93中,您可以创建复合变量。这些确实是哈希,而不是数组,而是使用数字索引时可以使用的。

$ $ 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

在这里开发更多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

最新更新