2014-01-23 252 views
0

我們可以在Ksh中創建動態數組嗎? 喜歡,我們可以創建array_ $ i []數組,其中我的範圍從1到5?即array_1 [],array_2 [],array_3 [],array_4 []和array_5 []Unix Shell腳本(KSH)

,以便我可以遍歷array_ $ i。 在ksh中可能嗎?

+0

如果你沒有,你應該能夠'EVAL效仿它可以'。 – Barmar

+0

您能否說明如何使用eval?另外,如何訪問數組元素? $ {array_ $ arr [$ i]}不起作用我相信? – user1999315

+1

如果您需要豐富的數據結構,shell腳本語言是錯誤的選擇。 – chepner

回答

0

您可以eval

eval array_$i'[$j]=$val' 
eval 'echo $array_'$i 
0

做在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 
+0

感謝Henk的建議,但是我們使用的ksh版本是88.但是如果可能的話,需要創建動態數組。使用eval,可以分配值。然而,我仍然面臨着循環迭代的問題。 – user1999315

+0

有沒有那麼多的Unixen只有做ksh88。那是哪個平臺?有些人,比如IBM,都有一個單獨的ksh93二進制文件。無論如何,eval會起作用,但我會轉移到awk/perl/python/ksh93 - 任何可用的,即使我自己必須安裝它。 –

0

要在這裏開發出更多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