我正在寻找一种复制关联数组的有效方法,因为我正在主脚本中的两个嵌套的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[@]}")
答案 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" )
。然后执行它。