我們可以在Ksh中創建動態數組嗎? 喜歡,我們可以創建array_ $ i []數組,其中我的範圍從1到5?即array_1 [],array_2 [],array_3 [],array_4 []和array_5 []Unix Shell腳本(KSH)
,以便我可以遍歷array_ $ i。 在ksh中可能嗎?
我們可以在Ksh中創建動態數組嗎? 喜歡,我們可以創建array_ $ i []數組,其中我的範圍從1到5?即array_1 [],array_2 [],array_3 [],array_4 []和array_5 []Unix Shell腳本(KSH)
,以便我可以遍歷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
感謝Henk的建議,但是我們使用的ksh版本是88.但是如果可能的話,需要創建動態數組。使用eval,可以分配值。然而,我仍然面臨着循環迭代的問題。 – user1999315
有沒有那麼多的Unixen只有做ksh88。那是哪個平臺?有些人,比如IBM,都有一個單獨的ksh93二進制文件。無論如何,eval會起作用,但我會轉移到awk/perl/python/ksh93 - 任何可用的,即使我自己必須安裝它。 –
要在這裏開發出更多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
如果你沒有,你應該能夠'EVAL效仿它可以'。 – Barmar
您能否說明如何使用eval?另外,如何訪問數組元素? $ {array_ $ arr [$ i]}不起作用我相信? – user1999315
如果您需要豐富的數據結構,shell腳本語言是錯誤的選擇。 – chepner