【发布时间】:2019-06-28 00:19:46
【问题描述】:
我正在寻找一种复制关联数组的有效方法,因为我在主脚本的两个嵌套 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[@]}")
【问题讨论】:
-
循环是唯一的方法。但是,您没有嵌套循环。第一个循环进行复制,第二个循环(跟随第一个循环)不是必需的;它只是验证
copyLinks包含您想要的键值对(并且可以替换为declare -p copyLinks)。 -
循环有什么问题?你担心速度吗?
-
在我的主脚本中,我确实有两个嵌套循环,我使用数组中的数据来执行 distcp 命令。
-
This ksh example 也适用于 bash >= 4.0。
typeset已过时。将其替换为declare。 -
是的,我担心速度,因为我的关联数组的长度是 50。
标签: bash shell sh associative-array