这基本上就是我要做的事情:为关联数组的值分配一个列表。
#!/usr/local/bin/bash
declare -A params
params[n]=(200 400 600 800)
params[p]=(0.2 0.4)
但我收到了这个错误:
line 4: params[n]: cannot assign list to array member
line 5: params[p]: cannot assign list to array member
有没有办法解决这个问题?
答案 0 :(得分:6)
基本上,你想要二维数组:
第一维被'n'或'p'取消引用。
第二个维度与正常数组一样被解引用。
bash
不支持多维数组。
您可以选择以下选项:
在一维数组中使用组合索引作为数组索引。
declare -A params
params[n,0]=200
params[n,1]=400
params[n,2]=600
params[n,3]=800
params[p,0]=0.2
params[p,1]=0.4
使用2级解除引用:
declare -A params
#Declare 2 normal arrays.
array1=(200 400 600 800)
array2=(0.2 0.4)
#Use the main array to hold the names of these arrays.
params[n]=array1[@]
params[p]=array2[@]
#use the array.
printf "%s\n" "${!params[n]}"
printf "%s\n" "${!params[p]}"
旧的2个独立数组:
param_n=(200 400 600 800)
param_p=(0.2 0.4)
使用这些方法,即使值包含空格,也可以迭代数组。
答案 1 :(得分:4)
试试这个:
params=([n]="200 400 600 800" [p]="0.2 0.4")
declare -p params
输出:
declare -A params='([n]="200 400 600 800" [p]="0.2 0.4" )'
答案 2 :(得分:3)
您是否要将列表作为元素n
和p
存储在关联数组中?像这样:
#!/bin/bash
declare -A params
params[n]="200 400 600 800"
params[p]="0.2 0.4"
for i in ${!params[@]}; do
echo "params[$i] = ${params[$i]}"
done
exit 0
<强>输出强>
$ bash aalist.sh
params[n] = 200 400 600 800
params[p] = 0.2 0.4