2017-02-25 54 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