[英]Displaying bash array
#!/bin/bash
declare -a array
printf 'Matrix size:' ;
read n;
printf '\n';
for ((i=1;i<=n;i++))
do
for((j=1;j<=n;j++))
do
printf 'x[%d][%d]=' ${array[i][j]};
read array[i][j];
done
done
echo "Initial matrix:"
for((i=1;i<=$n;i++))
do
for ((j=1;j<=n;j++))
do
printf '%d' ${array[i][j]};
printf '\n';
done
done
一個無法顯示bash數組,並且不知道我的錯誤在哪里。 例如,我有:n = 3 ....我在數組(1-9)中輸入數字當我顯示時:初始矩陣:3 3 3 6 6 6 9 9 9 Thx
bash沒有多維數組; 當您引用array[i][j]
, [j]
被忽略。 bash還具有其他局限性,往往使其不適用於此類事情,例如不支持浮點數學運算(無論如何,還是本機)。
如果您需要在bash中偽造多維數組,則可以使用array[i*n+j]
來存儲array [i] [j]來偽造它:
#!/bin/bash
declare -a array
read -p 'Matrix size: ' n
for ((i=1; i<=n; i++)); do
for ((j=1; j<=n; j++)); do
read -p "x[$i][$j]=" array[i*n+j]
done
done
echo "Initial matrix:"
for ((i=1; i<=n; i++)); do
for ((j=1; j<=n; j++)); do
printf '%d ' ${array[i*n+j]}
done
printf '\n'
done
請注意,我對您的代碼做了一些其他的清理:
read -p
而不是printf
打印提示。 printf
來在字符串中插入變量,只需將$i
嵌入在雙引號引起來的字符串中即可(或使用${i}
避免對變量名的末尾在哪里產生歧義)。 可以使用bash 4的關聯數組來獲取多維數組... sorta:
#!/bin/bash
declare -A array
printf "Matrix size: "
read -r n
for ((i = 0; i < n; i++)); do
for ((j = 0; j < n; j++)); do
printf "array[$i][$j] = "
read -r val
array["${i}_${j}"]=$val
done
done
echo "Initial matrix:"
for key in "${!array[@]}"; do
val=${array[$key]}
echo "$key $val"
done
但是,bash中沒有真正的多維數組支持。
與使用標准數字索引數組的答案不同,此方法不需要在讀取數組之前就知道數組的尺寸。
戈登的所有言論都是完全正確的,為了完整起見,我只補充說ksh93
(我不確定ksh88
) 確實支持多維數組(但這是眾所周知的未ksh88
文檔的功能),因此您可以執行此操作本機與ksh
:
matrix.sh
:
#!/bin/ksh
printf "Matrix size: "
read n
for ((i = 0; i < n; i++)); do
for ((j = 0; j < n; j++)); do
printf "array[$i][$j] = "
read array[i][j]
done
done
echo "Initial matrix:"
for ((i = 0; i < ${#array[@]}; i++)); do
for k in "${array[i][@]}"; do
printf "${k} "
done
echo
done
例:
$ ./matrix.sh
Matrix size: 2
array[0][0] = 3
array[0][1] = 4
array[1][0] = 5
array[1][1] = 6
Initial matrix:
3 4
5 6
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.