如何为关联数组的值分配列表?

时间:2015-04-28 05:55:12

标签: bash

这基本上就是我要做的事情:为关联数组的值分配一个列表。

#!/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

有没有办法解决这个问题?

3 个答案:

答案 0 :(得分:6)

基本上,你想要二维数组:

第一维被'n'或'p'取消引用。
第二个维度与正常数组一样被解引用。

bash不支持多维数组。

您可以选择以下选项:

  1. 在一维数组中使用组合索引作为数组索引。

    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. 使用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]}"
    
  3. 旧的2个独立数组:

    param_n=(200 400 600 800)
    param_p=(0.2 0.4)
    
  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)

您是否要将列表作为元素np存储在关联数组中?像这样:

#!/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