Generieren eines 2D-Arrays in Bash mit unbekannter Dimension

Generieren eines 2D-Arrays in Bash mit unbekannter Dimension

Ich frage mich nur, ob es möglich ist, ein 2D-Array zu generieren, wenn die Dimension vor der Benutzereingabe nicht bekannt ist. Wenn der Benutzer beispielsweise 2 2 in die Befehlszeile eingibt, generiert die Shell darauf basierend ein 2D-Array? Danke

Antwort1

bashist eine interpretierte Sprache und muss nicht im Voraus wissen, wie viel Speicher zugewiesen werden soll.

Daher ist es möglich, ein neues Array dynamisch zu initialisieren, ohne es deklariert zu haben, oder ein bereits deklariertes Array zu erweitern, um weitere Einträge hinzuzufügen. Die Verwendung mehrdimensionaler Arrays ist jedoch nicht möglich.

Dies kann jedoch vorgetäuscht werden: Da Sie keine genaue Aufgabe angegeben haben, werde ich ein bashSkriptbeispiel bereitstellen, das zeigt, wie eine benutzerdefinierte m x nTabelle mit Zufallszahlen (die nicht wirklich zufällig sind, da jede Spalte bei jedem Durchlauf in allen Zeilen immer die gleiche Zahl enthält, aber das ist für die Frage nicht relevant) gefüllt und gedruckt wird (vereinfacht vonDasStack Overflow-Antwort):

#!/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

Antwort2

Sie könnten ein 1D-Array deklarieren und alle Zahlen zur Laufzeit in ein 1D-Array einlesen. Nachdem Sie die Dimension kennen, könnten Sie das 1D-Array „wie ein 2D-Array“ verarbeiten.

Nehmen wir zum Beispiel an, dass ein 1D-Array enthält

[1, 5, 9, 11]

Wenn wir wirklich wollen

[[1,5], [9,11]]

als unser Array, sodass der Index 0 [1,5] ist, dann könnten Sie so etwas tun, um auf [1,5] zuzugreifen (pos = 0)

Pseudocode

for i in 0:(pos*dim + dim-1)  
    echo arr[i]

um auf [9,11] zuzugreifen (pos = 1)

for i in pos*dim:(pos*dim + dim - 1)
    echo arr[i]

Hoffentlich ergibt das einen gewissen Sinn. Tatsächlich ist ein 2D-Array so etwas wie ein 1D-Array.

verwandte Informationen