2011-07-11 15 views
0

連想配列をコピーする方法はありますか?私は、通常の配列のような1つのライナーで簡単にコピーすることができることを実現: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 [$キー] } "' '代入のために、typesetと見栄えがよく見えます。いずれにせよ、私は+ =あなたが期待どおりに動作するとは思わない。これもテストする時間がない。 @ニトロダスト幸運! – shellter

+0

あなたの答えを編集して、それを行う正しい方法を含めてください。 '+ ='は連想配列の割り当てで有効な構文ではありません。 @shelter - あなたのメソッドは動作します。ありがとう! – Nitrodist

+0

お寄せください。 '+ ='に関して、私はksh93にアクセスすることはできませんが、[ksh93マニュアル](http://www2.research.att.com/sw/download/man/man1/ksh-man.html#Variable% "さらに、+の代わりに+ =を使用して、前の値に追加または追加することを示すことができます...複合割り当ての場合、前の値は設定されておらず、新しい値タイプが互換性があるならば、現在のものに追加されます。 –

関連する問題