Un array è una variabile contenente più valori che possono essere dello stesso tipo o di tipo diverso. Non esiste un limite massimo alla dimensione di una matrice, né alcun requisito che le variabili membro siano indicizzate o assegnate in modo contiguo. L'indice dell'array inizia con zero.
In questo articolo, esaminiamo 15 diverse operazioni sugli array in bash.
Questo articolo fa parte della serie in corso di Bash Tutorial. Per coloro che sono nuovi allo scripting di bash, inizia subito dal tutorial introduttivo allo scripting di Bash.
1. Dichiarazione di un array e assegnazione di valori
In bash, l'array viene creato automaticamente quando viene utilizzata una variabile in un formato come,
name[index]=value
- nome è un nome qualsiasi per un array
- l'indice potrebbe essere qualsiasi numero o espressione che deve restituire un numero maggiore o uguale a zero. Puoi dichiarare un array esplicito usando dichiarare -a arrayname.
$ cat arraymanip.sh #! /bin/bash Unix[0]='Debian' Unix[1]='Red hat' Unix[2]='Ubuntu' Unix[3]='Suse' echo ${Unix[1]} $./arraymanip.sh Red hat
Per accedere a un elemento da un array, usa le parentesi graffe come ${name[index]}.
2. Inizializzazione di un array durante la dichiarazione
Invece di inizializzare ogni elemento di un array separatamente, puoi dichiarare e inizializzare un array specificando l'elenco degli elementi (separati da uno spazio bianco) tra parentesi graffe.
Syntax: declare -a arrayname=(element1 element2 element3)
Se gli elementi hanno il carattere spazio bianco, racchiudelo tra virgolette.
#! /bin/bash $cat arraymanip.sh declare -a Unix=('Debian' 'Red hat' 'Red hat' 'Suse' 'Fedora');
dichiarare -a dichiara un array e tutti gli elementi tra parentesi sono gli elementi di un array.
3. Stampa l'intera matrice Bash
Esistono diversi modi per stampare tutti gli elementi dell'array. Se il numero di indice è @ o *, viene fatto riferimento a tutti i membri di una matrice. Puoi attraversare gli elementi dell'array e stamparlo, usando le istruzioni di ciclo in bash.
echo ${Unix[@]} # Add the above echo statement into the arraymanip.sh #./t.sh Debian Red hat Ubuntu Suse
Fare riferimento al contenuto di una variabile membro di un array senza fornire un numero di indice equivale a fare riferimento al contenuto del primo elemento, quello a cui si fa riferimento con il numero di indice zero.
4. Lunghezza dell'array Bash
Possiamo ottenere la lunghezza di un array usando il parametro speciale chiamato $#.
${#arrayname[@]} ti dà la lunghezza dell'array.
$ cat arraymanip.sh declare -a Unix=('Debian' 'Red hat' 'Suse' 'Fedora'); echo ${#Unix[@]} #Number of elements in the array echo ${#Unix} #Number of characters in the first element of the array.i.e Debian $./arraymanip.sh 4 6
5. Lunghezza dell'ennesimo elemento in un array
${#arrayname[n]} dovrebbe fornire la lunghezza dell'ennesimo elemento in un array.
$cat arraymanip.sh #! /bin/bash Unix[0]='Debian' Unix[1]='Red hat' Unix[2]='Ubuntu' Unix[3]='Suse' echo ${#Unix[3]} # length of the element located at index 3 i.e Suse $./arraymanip.sh 4
6. Estrazione per offset e lunghezza per un array
L'esempio seguente mostra il modo per estrarre 2 elementi a partire dalla posizione 3 da un array chiamato Unix.
$cat arraymanip.sh Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux'); echo ${Unix[@]:3:2} $./arraymanip.sh Suse Fedora
L'esempio precedente restituisce gli elementi nel 3° indice e nel quarto indice. L'indice inizia sempre con zero.
7. Estrazione con offset e lunghezza, per un particolare elemento di un array
Per estrarre solo i primi quattro elementi da un elemento dell'array. Ad esempio, Ubuntu che si trova al secondo indice di un array, puoi usare offset e lunghezza per un particolare elemento di un array.
$cat arraymanip.sh #! /bin/bash Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux'); echo ${Unix[2]:0:4} ./arraymanip.sh Ubun
L'esempio sopra estrae i primi quattro caratteri dal 2° elemento indicizzato di un array.
8. Cerca e sostituisci in un elemento dell'array
L'esempio seguente cerca Ubuntu in un elemento dell'array e lo sostituisce con la parola "SCO Unix".
$cat arraymanip.sh #!/bin/bash Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux'); echo ${Unix[@]/Ubuntu/SCO Unix} $./arraymanip.sh Debian Red hat SCO Unix Suse Fedora UTS OpenLinux
In questo esempio, sostituisce l'elemento nel 2° indice 'Ubuntu' con 'SCO Unix'. Ma questo esempio non sostituirà permanentemente il contenuto dell'array.
9. Aggiungi un elemento a un array Bash esistente
L'esempio seguente mostra il modo per aggiungere un elemento all'array esistente.
$cat arraymanip.sh Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux'); Unix=("${Unix[@]}" "AIX" "HP-UX") echo ${Unix[7]} $./arraymanip.sh AIX
Nell'array chiamato Unix, gli elementi "AIX" e "HP-UX" vengono aggiunti rispettivamente al 7° e all'8° indice.
10. Rimuovere un elemento da un array
unset viene utilizzato per rimuovere un elemento da un array.unset avrà lo stesso effetto dell'assegnazione di null a un elemento.
$cat arraymanip.sh #!/bin/bash Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux'); unset Unix[3] echo ${Unix[3]}
Lo script precedente stamperà semplicemente null, che è il valore disponibile nel 3° indice. L'esempio seguente mostra un modo per rimuovere completamente un elemento da un array.
$ cat arraymanip.sh Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux'); pos=3 Unix=(${Unix[@]:0:$pos} ${Unix[@]:$(($pos + 1))}) echo ${Unix[@]} $./arraymanip.sh Debian Red hat Ubuntu Fedora UTS OpenLinux
In questo esempio, ${Unix[@]:0:$pos} ti darà 3 elementi a partire dal 0° indice cioè 0,1,2 e ${Unix[@]:4} darà gli elementi dal 4° indice al ultimo indice. E unisci entrambi l'output sopra. Questa è una delle soluzioni alternative per rimuovere un elemento da un array.
11. Rimuovi gli elementi dell'array Bash usando i modelli
Nella condizione di ricerca puoi fornire i modelli e archiviare l'elemento rimanente in un altro array come mostrato di seguito.
$ cat arraymanip.sh #!/bin/bash declare -a Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora'); declare -a patter=( ${Unix[@]/Red*/} ) echo ${patter[@]} $ ./arraymanip.sh Debian Ubuntu Suse Fedora
L'esempio sopra rimuove gli elementi che hanno il picchiettio Rosso*.
12. Copia di un array
Espandi gli elementi dell'array e archiviali in un nuovo array come mostrato di seguito.
#!/bin/bash Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux'); Linux=("${Unix[@]}") echo ${Linux[@]} $ ./arraymanip.sh Debian Red hat Ubuntu Fedora UTS OpenLinux
13. Concatenazione di due Bash Array
Espandi gli elementi dei due array e assegnalo al nuovo array.
$cat arraymanip.sh #!/bin/bash Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux'); Shell=('bash' 'csh' 'jsh' 'rsh' 'ksh' 'rc' 'tcsh'); UnixShell=("${Unix[@]}" "${Shell[@]}") echo ${UnixShell[@]} echo ${#UnixShell[@]} $ ./arraymanip.sh Debian Red hat Ubuntu Suse Fedora UTS OpenLinux bash csh jsh rsh ksh rc tcsh 14
Stampa l'array che contiene gli elementi sia dell'array "Unix" che "Shell" e il numero di elementi del nuovo array è 14.
14. Eliminazione di un intero array
unset viene utilizzato per eliminare un intero array.
$cat arraymanip.sh #!/bin/bash Unix=('Debian' 'Red hat' 'Ubuntu' 'Suse' 'Fedora' 'UTS' 'OpenLinux'); Shell=('bash' 'csh' 'jsh' 'rsh' 'ksh' 'rc' 'tcsh'); UnixShell=("${Unix[@]}" "${Shell[@]}") unset UnixShell echo ${#UnixShell[@]} $ ./arraymanip.sh 0
Dopo aver annullato l'impostazione di un array, la sua lunghezza sarebbe zero come mostrato sopra.
15. Carica il contenuto di un file in un array
Puoi caricare il contenuto del file riga per riga in un array.
#Example file $ cat logfile Welcome to thegeekstuff Linux Unix $ cat loadcontent.sh #!/bin/bash filecontent=( `cat "logfile" `) for t in "${filecontent[@]}" do echo $t done echo "Read file content!" $ ./loadcontent.sh Welcome to thegeekstuff Linux Unix Read file content!
Nell'esempio sopra, ogni indice di un elemento dell'array è stato stampato attraverso il ciclo for.
Lettura consigliata
Bash 101 Hacks, di Ramesh Natarajan . Passo la maggior parte del mio tempo in ambiente Linux. Quindi, naturalmente sono un grande fan della riga di comando di Bash e degli script di shell. 15 anni fa, quando stavo lavorando su diverse versioni di *nix, scrivevo molto codice sulla shell C e sulla shell Korn. Negli anni successivi, quando ho iniziato a lavorare su Linux come amministratore di sistema, ho praticamente automatizzato ogni possibile attività utilizzando lo scripting della shell Bash. Sulla base della mia esperienza con Bash, ho scritto l'eBook Bash 101 Hacks che contiene 101 esempi pratici sia sulla riga di comando di Bash che sugli script di shell. Se stavi pensando di padroneggiare Bash, fatti un favore e leggi questo libro, che ti aiuterà a prendere il controllo della tua riga di comando di Bash e degli script della shell.