繁体   English   中英

Unix Shell脚本(KSH)

[英]Unix Shell scripting (KSH)

我们可以在Ksh中创建动态数组吗? 像,我们可以创建我范围从1到5的array_ $ i []数组吗? 即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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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