2011-07-11 44 views
0

有沒有辦法複製關聯數組?我認識到,規則排列可以很容易地用一個襯墊這樣複製:如何複製ksh關聯數組?

set -A NEW_ARRAY $(echo ${OTHER_ARRAY[*]}) 

但關聯數組這樣做只是讓你以這種方式的值。

我知道nameref,但我很想知道是否有方法複製數組,使原始數組不受影響。

回答

1

未經測試:

typeset -A NEW_ARRAY 
for key in "${!OTHER_ARRAY[@]}"; do 
    NEW_ARRAY["$key"]="${OTHER_ARRAY[$key]}" 
done 

測試:

#!/usr/bin/ksh93 

OTHER_ARRAY=([Key1]="Val1" [Key2]="Val2" [Key3]="Val3") 

echo Keys: ${!OTHER_ARRAY[*]} 
echo Values: ${OTHER_ARRAY[*]} 

typeset -A NEW_ARRAY 
for key in "${!OTHER_ARRAY[@]}"; do 
    NEW_ARRAY["$key"]="${OTHER_ARRAY[$key]}" 
done 

echo Keys: ${!NEW_ARRAY[*]} 
echo Values: ${NEW_ARRAY[*]} 

結果:

/home/exuser>./a 
Keys: Key3 Key1 Key2 
Values: Val3 Val1 Val2 
Keys: Key3 Key1 Key2 
Values: Val3 Val1 Val2 
+1

爲什麼不'NEW_ARRAY [ 「$鍵」] =「$ {OTHER_ARRAY [$關鍵] }「'對於作業,排版和外觀看起來不錯。無論如何,我不認爲+ =會像你期望的那樣工作,也沒有時間去測試這個。 @Nitrodist祝你好運! – shellter

+0

編輯你的答案,包括正確的做法。 '+ ='不是有關聯數組賦值的有效語法。 @shelter - 你的方法有效。謝謝! – Nitrodist

+0

樂於助人。關於'+ =',我無法訪問ksh93,但是[ksh93手冊](http://www2.research.att.com/sw/download/man/man1/ksh-man.html#Variable% 20Assignments)表示它應該工作:「另外,可以使用+ =代替=來表示添加或附加到前一個值。對於複合賦值,以前的值不是未設置的,新值附加到當前的那些,只要這些類型是兼容的。「 –