为了账号安全,请及时绑定邮箱和手机立即绑定

如何在bash中声明2D数组

如何在bash中声明2D数组

慕妹3146593 2019-08-17 16:20:59
如何在bash中声明2D数组我想知道如何在bash中声明一个2D数组然后初始化为0。在C中它看起来像这样:int a[4][5] = {0};我如何为元素赋值?如在C:a[2][3] = 3;
查看完整描述

3 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

Bash不支持多维数组。

您可以使用间接扩展来模拟它:

#!/bin/bashdeclare -a a0=(1 2 3 4)declare -a a1=(5 6 7 8)var="a1[1]"echo ${!var}  # outputs 6

使用此方法也可以进行分配:

let $var=55echo ${a1[1]}  # outputs 55

编辑1:要从文件中读取此类数组,行中的每一行以及由空格分隔的值,请使用以下命令:

idx=0while read -a a$idx; do
    let idx++;done </tmp/some_file

编辑2:要声明初始化a0..a3[0..4]0,您可以运行:

for i in {0..3}; do
    eval "declare -a a$i=( $(for j in {0..4}; do echo 0; done) )"done


查看完整回答
反对 回复 2019-08-17
?
缥缈止盈

TA贡献2041条经验 获得超4个赞

ash没有多维数组。但您可以使用关联数组模拟一些类似的效果。以下是假装用作多维数组的关联数组的示例:


declare -A arr

arr[0,0]=0

arr[0,1]=1

arr[1,0]=2

arr[1,1]=3

echo "${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(逗号运算符右侧的值)。


查看完整回答
反对 回复 2019-08-17
  • 3 回答
  • 0 关注
  • 500 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信