![](/img/trans.png)
[英]How can I pass an array of strings to a function as arguments?
[英]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.