簡體   English   中英

BASH:如何將數組中的字符串作為參數傳遞給命令?

[英]BASH: How to pass strings from array as arguments to a command?

“ list_of_arrays”中的每個字符串都是我需要傳遞給'declare'命令行的數組的名稱。

就像是:

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

如何使此功能適用於任意數量的字符串? 每個字符串/數組名稱將始終是唯一的。

您將需要使用間接變量來完成此操作:

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希望將數組名稱作為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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM