2017-02-25 57 views
0

这里初始化二维数组是错误在bash

#!/bin/bash 

declare -a data81 

for ((i=1; i<=3; i++)) 
do 
    for ((j=1; j<=2; j++)) 
    do 
     data81[$i, $j]=$i 
     printf "%4s" ${data81[$i, $j]} 
     printf "%4s\n" ${data81[1, 1]} 
    done 
    echo 
done 

的代码,我有问题的输出如下:

1 1 
    1 1 

    2 2 
    2 2 

    3 3 
    3 3 

这不是我想要的东西,因为我用printf "%4s\n" ${data81[1, 1]},所以第二列应该是相同的。

+4

在Bash中没有二维数组。你拥有的代码并没有做你认为它的事。 – Fred

+1

您可以使用关联数组来模拟多维数组。看到这篇文章:http://stackoverflow.com/questions/11233825/multi-dimensional-arrays-in-bash – codeforester

+1

可能重复[多维数组在Bash](http://stackoverflow.com/questions/11233825/多维数组bash) – codeforester

回答

0

改变这一行:

declare -a data81 

向该:

declare -A data81 

这并不创建多维阵列,而是关联数组。索引是一个字符串,充当字典型数据结构的关键字。小心你如何构建索引,每次访问元素时都必须具有完全相同的结构。

+0

Fred:我将-a改为-A,但是我的Mac抱怨说第3行:declare:-A:invalid optiondeclare:usage:declare [-afFirtx] [-p] [name [= value] ...]'' – user6948979

+0

MacOS Bash卡住了不支持关联数组的旧版本.. – Fred

+0

Fred:有没有办法可以更新bash? – user6948979

0

您可以尝试这种方式。

#!/bin/bash 

declare -a data81 

for ((i=1; i<=3; i++)) 
do 
    for ((j=1; j<=2; j++)) 
    do 
     data81[$i$j]=$i 
     printf "%4s" ${data81[$i$j]} 
     printf "%4s\n" ${data81[11]} 
    done 
    echo 
done