BASH:如何将数组中的字符串作为参数传递给命令?

时间:2015-11-26 14:34:06

标签: arrays bash

" list_of_arrays"中的每个字符串都是我需要传递给'声明'的数组的名称。命令行。

类似的东西:

for arrayname in "${list_of_arrays[@]}"; do 
declare -A idx=(["$arrayname[0]"]=0 ["$arrayname[1]"]=0 ["$arrayname[2]"]=0 ...)
done

如何针对任意数量的字符串进行此操作?每个字符串/数组名称将始终是唯一的。

1 个答案:

答案 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