【问题标题】:How to copy a ksh associative array?如何复制 ksh 关联数组?
【发布时间】:2011-10-02 19:42:44
【问题描述】:

有没有办法复制关联数组?我意识到可以使用单行轻松复制常规数组:

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

但是使用关联数组这样做只会以这种方式为您提供值。

我知道nameref,但我想知道是否有一种方法可以复制数组以使原始数组不受影响。

【问题讨论】:

    标签: arrays associative-array ksh copying


    【解决方案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
    

    【讨论】:

    • 为什么不只是 NEW_ARRAY["$key"]="${OTHER_ARRAY[$key]}" 用于分配,排版和外观看起来不错。无论如何,我认为 += 不会像您期望的那样工作。也没有时间对此进行测试。 @Nitrodist 祝你好运!
    • 编辑了您的答案以包括正确的方法。 += 不是关联数组赋值的有效语法。 @shelter - 你的方法有效。谢谢!
    • 乐于助人。关于+=,我无法访问ksh93,但ksh93 manual 表明它应该可以工作:“此外,可以使用+= 代替= 来表示添加或附加到前一个值。 ... 对于复合赋值,如果类型兼容,之前的值不会取消,新值会附加到当前值。”
    猜你喜欢
    • 2011-05-22
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    • 2020-12-09
    • 2018-11-29
    • 2012-05-03
    • 2021-02-19
    • 2020-04-24
    相关资源
    最近更新 更多