連想配列をコピーする方法はありますか?通常の配列は、次のように1つのライナーで簡単にコピーできることに気付きました。
set -A NEW_ARRAY $(echo ${OTHER_ARRAY[*]})
しかし、連想配列を使用してこれを行うと、その方法で値が得られます。
私は知ってnameref
いますが、元の配列が影響を受けないように配列をコピーする方法があるかどうかを知りたいと思っています。
連想配列をコピーする方法はありますか?通常の配列は、次のように1つのライナーで簡単にコピーできることに気付きました。
set -A NEW_ARRAY $(echo ${OTHER_ARRAY[*]})
しかし、連想配列を使用してこれを行うと、その方法で値が得られます。
私は知ってnameref
いますが、元の配列が影響を受けないように配列をコピーする方法があるかどうかを知りたいと思っています。
未テスト:
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