Dichiarare un array ma non definirlo?


14

Ci sono molte guide là fuori che mostrano come dichiarare e definire un array

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

Quello che sto cercando di ottenere è dichiarare un array ma non definirlo perché non deve essere definito immediatamente, nella maggior parte dei linguaggi di programmazione sarà simile a questo

int bar[100];

Questo è possibile nel linguaggio di scripting della shell?

Risposte:


23

È possibile specificare che una variabile è un array creando un array vuoto, in questo modo:

var_name=()

var_name sarà quindi un array come riportato da

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

Esempio:

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]}"

che produce qualcosa del genere:

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

minerz029, @am: ..e come definire gli elementi? Ho provato ma potevo solo definire / accedere a una singola stringa ... un piccolo esempio per definire e accedere ai valori della variabile array sarebbe fantastico ...
preciso

ben capito che .. mi mancavano le parentesi graffe ..
preciso

4

Oltre a quanto sopra, possiamo anche creare un array dichiarando dichiarazione.

L'istruzione declare con l'opzione -a può essere utilizzata per dichiarare una variabile come un array, ma non è necessaria. Tutte le variabili possono essere utilizzate come array senza definizione esplicita. È un dato di fatto, sembra che, in un certo senso, tutte le variabili siano array e che l'assegnazione senza un abbonamento è la stessa dell'assegnazione a "[0]". La dichiarazione esplicita di un array viene eseguita utilizzando il dichiarare incorporato:

declare -a ARRAYNAME

Le matrici associative vengono create utilizzando

declare -A name.

Gli attributi possono essere specificati per una variabile di matrice usando i comandi dichiar e readonly. Ogni attributo si applica a tutti i membri di un array.

Dopo aver impostato qualsiasi variabile di matrice, accedete come segue:

${array_name[index]}

1

Questo è in realtà lo stesso di C. In C, possiamo prendere l'array come preferisci. Qui, possiamo prendere un array vuoto e quindi inserire tutti i valori.

bar=()

Semplice per Loop prendere valore in quell'array e stampare che:

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

Spero che sia d'aiuto.


Qual è il problema nella risposta? Perché votare male?
Maniruzzaman Akash,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.