显示bash数组

Men*_*fis 0 linux bash shell

#!/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
Run Code Online (Sandbox Code Playgroud)

A无法显示bash数组而且不明白我的错误在哪里.例如我有:n = 3 ....我在数组中输入数字(1-9)当我显示时:初始矩阵:3 3 3 6 6 6 9 9 9 Thx

Gor*_*son 5

bash没有多维数组; 当你引用时array[i][j],会[j]被忽略.bash还有其他限制,往往使它不适合这种事情,例如不支持浮点数学(本机,无论如何).

如果你需要在bash中伪造一个多维数组,你可以通过使用array[i*n+j]存储数组[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
Run Code Online (Sandbox Code Playgroud)

请注意,我已对您的代码进行了一些额外的清理:

  • 不要将分号放在一行的末尾,它们在shell脚本中是多余的.
  • 打印提示read -p而不是printf.
  • 输入循环是打印数组[i] [j](即数组的内容),它应该打印i和j.
  • 您不需要使用printf在字符串中插入变量,只需嵌入$i双引号字符串(或用于${i}避免变量名称末尾的含糊不清).
  • 最后,当打印数组时,我在每行之后放置一个换行符,而不是在每个元素之后.