在 Bash 中生成维度未知的二维数组

在 Bash 中生成维度未知的二维数组

只是想知道如果在用户输入之前不知道维度,是否可以生成二维数组。例如,如果用户在命令行上输入 2 2,shell 会根据该值生成二维数组吗?谢谢

答案1

bash是一种解释型语言,它不需要提前知道要分配多少内存。

因此,可以在未声明的情况下动态初始化新数组,或者扩展已声明的数组以添加更多条目,但不能使用多维数组。

然而,这可以被伪造:由于您没有提供要完成的确切任务,我将提供一个bash脚本示例,该示例展示了如何用随机数填充用户定义的m x n表(这些随机数并不是真正随机的,因为每列在每次运行中所有行上的数字始终相同,但这与问题无关)并打印它(从简化而来Stack Overflow 答案):

#!/bin/bash

declare -a array
read -p 'm: ' m
read -p 'n: ' n
for ((i=0; i<m; i++))
do
    for ((j=0; j<n; j++))
    do
        a[${i},${j}]=$RANDOM
    done
done
for ((i=0; i<m; i++))
do
    for ((j=0; j<n; j++))
    do
        echo -ne "${a[${i},${j}]}\t"
    done
    echo
done

答案2

您可以声明一个一维数组,并在运行时将所有数字读入一维数组。知道维度后,您可以“像处理二维数组一样”处理一维数组。

例如,假设一维数组包含

[1, 5, 9, 11]

如果我们真的想要

[[1,5], [9,11]]

作为我们的数组,索引 0 是 [1,5],那么你可以做这样的事情来访问 [1,5] (pos = 0)

伪代码

for i in 0:(pos*dim + dim-1)  
    echo arr[i]

访问 [9,11] (pos = 1)

for i in pos*dim:(pos*dim + dim - 1)
    echo arr[i]

希望这能让你理解。实际上,二维数组有点像一维数组。

相关内容