" list_of_arrays"中的每个字符串都是我需要传递给'声明'的数组的名称。命令行。
类似的东西:
for arrayname in "${list_of_arrays[@]}"; do
declare -A idx=(["$arrayname[0]"]=0 ["$arrayname[1]"]=0 ["$arrayname[2]"]=0 ...)
done
如何针对任意数量的字符串进行此操作?每个字符串/数组名称将始终是唯一的。
答案 0 :(得分:1)
您需要使用indirect variables来完成此任务:
foo=(a b c)
baz=(g h i)
bar=(d e f)
list_of_arrays=(foo bar baz)
for aname in "${list_of_arrays[@]}"; do
unset idx; declare -A idx
tmp="${aname}[@]"
for value in "${!tmp}"; do
idx[$value]=0
done
# print it out to verify
declare -p idx
done
declare -A idx='([a]="0" [b]="0" [c]="0" )'
declare -A idx='([d]="0" [e]="0" [f]="0" )'
declare -A idx='([g]="0" [h]="0" [i]="0" )'
好吧,以上所有都是错误的,因为OP希望数组 names 成为idx
数组的键。如评论中所述:
tmp=( "${list_of_arrays[@]/#/[}" )
tmp=( "${tmp[@]/%/]=0}" )
eval declare -A idx=( "${tmp[@]}" )
虽然我会更不聪明:
declare -A idx
for aname in "${list_of_arrays[@]}"; do idx["$aname"]=0; done
declare -p idx