簡體   English   中英

顯示bash數組

[英]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

請注意,我對您的代碼做了一些其他的清理:

  • 不要將分號放在行尾,因為它們在shell腳本中是多余的。
  • 使用read -p而不是printf打印提示。
  • 輸入循環是在應該打印i和j的地方打印array [i] [j](即數組的內容)。
  • 您不需要使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM