我想做的基本上就是将列表分配给关联数组的值。
#!/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
有没有办法解决这个问题?
我想做的基本上就是将列表分配给关联数组的值。
#!/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
有没有办法解决这个问题?
基本上,您需要一个二维数组:
第一维由“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
使用两级取消引用:
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)
使用这些方法,即使值包含空格,您也可以遍历数组。 使用这些方法,您可以遍历包含空格的值的数组。
试试这个:
declare -A params
params=([n]="200 400 600 800" [p]="0.2 0.4")
declare -p params
输出:
声明 -A params='([n]="200 400 600 800" [p]="0.2 0.4")'
你是不是想将列表作为关联数组中的元素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