只是想知道如果在用户输入之前不知道维度,是否可以生成二维数组。例如,如果用户在命令行上输入 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]
希望这能让你理解。实际上,二维数组有点像一维数组。