Как скопировать ассоциативный массив без цикла for - PullRequest
0 голосов
/ 28 июня 2019

Я ищу эффективный способ скопировать ассоциативный массив, потому что я выполняю это действие в двух вложенных циклах 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 Ответ

2 голосов
/ 28 июня 2019

Просто распечатайте старые значения и переименуйте значение переменной.Тогда источник это.Ex.вот так:

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" ).Затем выполните его.

...