GNU/Linux >> Belajar Linux >  >> Linux

Cara mendeklarasikan array 2D di bash

Anda dapat mensimulasikannya misalnya dengan hash, tetapi perlu memperhatikan angka nol di depan dan banyak hal lainnya. Demonstrasi berikutnya berhasil, tetapi ini jauh dari solusi optimal.

#!/bin/bash
declare -A matrix
num_rows=4
num_columns=5

for ((i=1;i<=num_rows;i++)) do
    for ((j=1;j<=num_columns;j++)) do
        matrix[$i,$j]=$RANDOM
    done
done

f1="%$((${#num_rows}+1))s"
f2=" %9s"

printf "$f1" ''
for ((i=1;i<=num_rows;i++)) do
    printf "$f2" $i
done
echo

for ((j=1;j<=num_columns;j++)) do
    printf "$f1" $j
    for ((i=1;i<=num_rows;i++)) do
        printf "$f2" ${matrix[$i,$j]}
    done
    echo
done

contoh di atas membuat matriks 4x5 dengan bilangan acak dan mencetaknya ditransposisikan, dengan hasil contoh

           1         2         3         4
 1     18006     31193     16110     23297
 2     26229     19869      1140     19837
 3      8192      2181     25512      2318
 4      3269     25516     18701      7977
 5     31775     17358      4468     30345

Prinsipnya adalah:Membuat satu array asosiatif yang indeksnya berupa string seperti 3,4 . Manfaatnya:

  • dapat digunakan untuk array berdimensi apa saja;) seperti:30,40,2 untuk 3 dimensi.
  • sintaksnya dekat dengan "C" seperti larik ${matrix[2,3]}

Bash tidak memiliki array multidimensi. Tapi Anda bisa mensimulasikan efek yang agak mirip dengan array asosiatif. Berikut ini adalah contoh larik asosiatif yang berpura-pura digunakan sebagai larik multidimensi:

declare -A arr
arr[0,0]=0
arr[0,1]=1
arr[1,0]=2
arr[1,1]=3
echo "${arr[0,0]} ${arr[0,1]}" # will print 0 1

Jika Anda tidak mendeklarasikan array sebagai asosiatif (dengan -A ), di atas tidak akan berfungsi. Misalnya, jika Anda menghilangkan declare -A arr baris, echo akan mencetak 2 3 bukannya 0 1 , karena 0,0 , 1,0 dan itu akan dianggap sebagai ekspresi aritmatika dan dievaluasi menjadi 0 (nilai di sebelah kanan operator koma).


Linux
  1. Bagaimana Cara Men-debug Skrip Bash?

  2. Bagaimana Cara Membuat Array Elemen Unik Dari String/array Di Bash?

  3. Bagaimana saya bisa mendapatkan nilai unik dari array di Bash?

  1. Cara menggunakan perintah riwayat Bash

  2. Cara menulis loop di Bash

  3. cara menggeser nilai array di bash

  1. Pelajari penanganan kesalahan Bash dengan contoh

  2. Apakah `deklarasikan -a A` Membuat Array Kosong `a` Di Bash?

  3. Bagaimana Cara Mendeteksi Bash>=4.0?