Ein Array deklarieren, aber nicht definieren?

14

Es gibt viele Anleitungen , die zeigen, wie ein Array deklariert und definiert wird

foo[0]=abc 
foo[1]=def

Ich versuche, ein Array zu deklarieren, aber nicht zu definieren, da es nicht sofort definiert werden muss. In den meisten Programmiersprachen sieht es so aus

int bar[100];

Ist dies in der Shell-Skriptsprache möglich?

Computerfreak
quelle

Antworten:

23

Sie können festlegen, dass eine Variable ein Array ist, indem Sie ein leeres Array wie folgt erstellen:

var_name=()

var_name wird dann ein Array sein, wie von gemeldet

$ declare -p var_name
declare -a var_name='()'

Beispiel:

var_name=()
for i in {1..10}; do
    var_name[$i]="Field $i of the list"
done
declare -p var_name
echo "Field 5 is: ${var_name[5]}"

was so etwas ausgibt:

declare -a var_name='([1]="Field 1 of the list" [2]="Field 2 of the list" [3]="Field 3 of the list" [4]="Field 4 of the list" [5]="Field 5 of the list" [6]="Field 6 of the list" [7]="Field 7 of the list" [8]="Field 8 of the list" [9]="Field 9 of the list" [10]="Field 10 of the list")'
Field 5 is: Field 5 of the list
kiri
quelle
minerz029, @am: ..und wie werden die Elemente definiert? Ich habe versucht , konnte aber nur definieren / access eine einzelne Zeichenfolge .. ein kleines Beispiel zu definieren und den Zugriff , die Werte zu Array - Variable wäre toll ...
präzise
gut herausgefunden, dass .. Ich fehlte die Klammern ..
präzise
4

Zusätzlich zu der obigen Methode können wir auch ein Array durch eine declare-Anweisung erstellen.

Die declare-Anweisung mit der Option -a kann verwendet werden, um eine Variable als Array zu deklarieren. Dies ist jedoch nicht erforderlich. Alle Variablen können ohne explizite Definition als Arrays verwendet werden. Tatsächlich scheinen alle Variablen in gewissem Sinne Arrays zu sein, und diese Zuweisung ohne Index entspricht der Zuweisung zu "[0]". Die explizite Deklaration eines Arrays erfolgt mithilfe der integrierten Deklaration:

declare -a ARRAYNAME

Assoziative Arrays werden mit erstellt

declare -A name.

Attribute können für eine Arrayvariable mit den integrierten Funktionen declare und readonly angegeben werden. Jedes Attribut gilt für alle Mitglieder eines Arrays.

Nachdem Sie eine Array-Variable festgelegt haben, greifen Sie wie folgt darauf zu:

${array_name[index]}
bin
quelle
1

Dies ist eigentlich das Gleiche wie C. In C können wir das Array nach Ihren Wünschen verwenden. Hier können wir ein leeres Array nehmen und dann beliebige Werte setzen.

bar=()

Einfache For-Schleife, um den Wert in diesem Array zu übernehmen und Folgendes auszudrucken:

bar=()
for ((i=0;i<10;i++));
do
    read bar[$i]  #Take Value in bar array
    echo bar[$i]
done

Ich hoffe es hilft.

Maniruzzaman Akash
quelle
Was ist das Problem in der Antwort? Warum abstimmen?
Maniruzzaman Akash