簡體   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