猿问

如何在bash中声明2D数组

如何在bash中声明2D数组

我想知道如何在bash中声明一个2D数组然后初始化为0。

在C中它看起来像这样:

int a[4][5] = {0};

我如何为元素赋值?如在C:

a[2][3] = 3;


慕妹3146593
浏览 501回答 3
3回答

Smart猫小萌

Bash不支持多维数组。您可以使用间接扩展来模拟它:#!/bin/bashdeclare&nbsp;-a&nbsp;a0=(1&nbsp;2&nbsp;3&nbsp;4)declare&nbsp;-a&nbsp;a1=(5&nbsp;6&nbsp;7&nbsp;8)var="a1[1]"echo&nbsp;${!var}&nbsp;&nbsp;#&nbsp;outputs&nbsp;6使用此方法也可以进行分配:let&nbsp;$var=55echo&nbsp;${a1[1]}&nbsp;&nbsp;#&nbsp;outputs&nbsp;55编辑1:要从文件中读取此类数组,行中的每一行以及由空格分隔的值,请使用以下命令:idx=0while&nbsp;read&nbsp;-a&nbsp;a$idx;&nbsp;do &nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;idx++;done&nbsp;</tmp/some_file编辑2:要声明并初始化a0..a3[0..4]为0,您可以运行:for&nbsp;i&nbsp;in&nbsp;{0..3};&nbsp;do &nbsp;&nbsp;&nbsp;&nbsp;eval&nbsp;"declare&nbsp;-a&nbsp;a$i=(&nbsp;$(for&nbsp;j&nbsp;in&nbsp;{0..4};&nbsp;do&nbsp;echo&nbsp;0;&nbsp;done)&nbsp;)"done

缥缈止盈

ash没有多维数组。但您可以使用关联数组模拟一些类似的效果。以下是假装用作多维数组的关联数组的示例:declare -A arrarr[0,0]=0arr[0,1]=1arr[1,0]=2arr[1,1]=3echo "${arr[0,0]} ${arr[0,1]}" # will print 0 1如果未将数组声明为关联(with -A),则上述操作无效。例如,如果省略该declare -A arr行,echo则将打印2 3而不是0 1,因为0,0,1,0这将被视为算术表达式并计算为0(逗号运算符右侧的值)。
随时随地看视频慕课网APP
我要回答