просто интересно, можно ли сгенерировать двумерный массив, если размер неизвестен до ввода пользователя. Например, если пользователь вводит 2 2 в командной строке, оболочка сгенерирует двумерный массив на основе этого? спасибо
bash
интерпретируемый язык, и он не должен знать сколько памяти выделять заранее.
, Таким образом, возможно динамично инициализировать новый массив не объявив его или развернуть уже заявленный массив для добавления большего количества записей, однако не возможно использовать многомерные массивы.
Однако это может фальсифицироваться: так как Вы не обеспечили точную задачу выполнить, я обеспечу bash
пример сценария, который показывает, как заполнить пользовательское m x n
таблица со случайными числами (которые не действительно случайны, так как каждый столбец будет всегда иметь то же число на всех своих строках в каждом выполнении, но это не относится к вопросу), и распечатайте его (упрощенный от этот ответ Переполнения стека):
#!/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
Вы могли объявить 1D массив и считать все числа в 1D массив во времени выполнения. После знания размера Вы могли обработать 1D массив "как 2D массив".
Например, предположите 1D, массив содержит
[1, 5, 9, 11]
Если мы действительно хотим
[[1,5], [9,11]]
как наш массив, таким образом, что индекс 0 [1,5] затем, Вы могли сделать что-то вроде этого к доступу [1,5] (на месте продажи = 0)
for i in 0:(pos*dim + dim-1)
echo arr[i]
к доступу [9,11] (на месте продажи = 1)
for i in pos*dim:(pos*dim + dim - 1)
echo arr[i]
Надо надеяться, это имеет некоторый смысл. Действительно 2D массив является видом 1D массив.