只是想知道如果在用戶輸入之前不知道尺寸,是否可以生成二維數組。例如,如果使用者在命令列上輸入 2 2,shell 將基於此產生 2D 陣列?謝謝
答案1
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
答案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]
希望這有一定道理。實際上,二維數組是一維數組的一種。