如何在没有for循环的情况下复制关联数组

时间:2019-06-28 00:19:46

标签: bash shell sh associative-array

我正在寻找一种复制关联数组的有效方法,因为我正在主脚本中的两个嵌套的for循环内执行此操作。

以下是我在主脚本中使用的常规格式:

#!/bin/bash
declare -A oldLinks
oldLinks["A"]="linkA"
oldLinks["B"]="linkB"
oldLinks["C"]="linkC"
oldLinks["D"]="linkD"
#!/bin/bash
source exportThis.sh
declare -A copyLinks
for i in "${!oldLinks[@]}"; do 
 copyLinks[$i]=${oldLinks[$i]}
done
for k in "${!copyLinks[@]}"; do
  echo "$k -- ${copyLinks[$k]}"
done

在主脚本中以这种方式执行此操作时,出现此错误:

bash: copyLinks: "${oldLinks[@]}": must use subscript when assigning associative array
copyLinks=("${oldLinks[@]}")

1 个答案:

答案 0 :(得分:2)

只需打印旧值并重命名变量值。然后来源。例如像这样:

eval "$(declare -p oldLinks | sed 's/oldLinks/copyLinks/')"

declare -p oldLinks将打印declare -A oldLinks=([A]="linkA" [B]="linkB" [C]="linkC" [D]="linkD" )。然后,用oldLinks代替copyLinks,它就变成declare -A copyLinks=([A]="linkA" [B]="linkB" [C]="linkC" [D]="linkD" )。然后执行它。