【发布时间】:2011-10-02 19:42:44
【问题描述】:
有没有办法复制关联数组?我意识到可以使用单行轻松复制常规数组:
set -A NEW_ARRAY $(echo ${OTHER_ARRAY[*]})
但是使用关联数组这样做只会以这种方式为您提供值。
我知道nameref,但我想知道是否有一种方法可以复制数组以使原始数组不受影响。
【问题讨论】:
标签: arrays associative-array ksh copying
有没有办法复制关联数组?我意识到可以使用单行轻松复制常规数组:
set -A NEW_ARRAY $(echo ${OTHER_ARRAY[*]})
但是使用关联数组这样做只会以这种方式为您提供值。
我知道nameref,但我想知道是否有一种方法可以复制数组以使原始数组不受影响。
【问题讨论】:
标签: arrays associative-array ksh copying
未经测试:
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
【讨论】:
NEW_ARRAY["$key"]="${OTHER_ARRAY[$key]}" 用于分配,排版和外观看起来不错。无论如何,我认为 += 不会像您期望的那样工作。也没有时间对此进行测试。 @Nitrodist 祝你好运!
+= 不是关联数组赋值的有效语法。 @shelter - 你的方法有效。谢谢!
+=,我无法访问ksh93,但ksh93 manual 表明它应该可以工作:“此外,可以使用+= 代替= 来表示添加或附加到前一个值。 ... 对于复合赋值,如果类型兼容,之前的值不会取消,新值会附加到当前值。”