0
有沒有辦法複製關聯數組?我認識到,規則排列可以很容易地用一個襯墊這樣複製:如何複製ksh關聯數組?
set -A NEW_ARRAY $(echo ${OTHER_ARRAY[*]})
但關聯數組這樣做只是讓你以這種方式的值。
我知道nameref
,但我很想知道是否有方法複製數組,使原始數組不受影響。
有沒有辦法複製關聯數組?我認識到,規則排列可以很容易地用一個襯墊這樣複製:如何複製ksh關聯數組?
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
爲什麼不'NEW_ARRAY [ 「$鍵」] =「$ {OTHER_ARRAY [$關鍵] }「'對於作業,排版和外觀看起來不錯。無論如何,我不認爲+ =會像你期望的那樣工作,也沒有時間去測試這個。 @Nitrodist祝你好運! – shellter
編輯你的答案,包括正確的做法。 '+ ='不是有關聯數組賦值的有效語法。 @shelter - 你的方法有效。謝謝! – Nitrodist
樂於助人。關於'+ =',我無法訪問ksh93,但是[ksh93手冊](http://www2.research.att.com/sw/download/man/man1/ksh-man.html#Variable% 20Assignments)表示它應該工作:「另外,可以使用+ =代替=來表示添加或附加到前一個值。對於複合賦值,以前的值不是未設置的,新值附加到當前的那些,只要這些類型是兼容的。「 –