Ci sono molte ragioni per cui si potrebbe voler ripristinare un array BASH:
- Gestire la durata degli array è più semplice perché sono assegnati localmente.
- Per ottenere risultati just-in-time, può essere utile ottenere array dai metodi.
- Per supportare le tecniche degli algoritmi di log, i nomi dei metodi che restituiscono gli array possono essere eliminati.
Potresti credere che Bash perda la capacità di restituire array di funzioni. Tuttavia, questo non è esattamente corretto. È possibile spostare l'array risultante in un metodo per riferimento, prendendo spunto dagli sviluppatori C/C++. Tale strategia consente al metodo di continuare ad essere libero da riferimenti verso una variabile globale. Il seguente articolo mostra chiari casi di questo caso.
Esempio 1: restituzione di un array
Accedi al tuo sistema Linux e apri il terminale di comando per procedere. Creeremo un file Bash chiamato "script.sh" usando il toccare comando per restituire l'array usando la funzione Bash. La sceneggiatura è la seguente:
$ touch script.sh
È possibile visualizzare il file appena creato in Casa directory. Apri questo file e scrivici il codice aggiunto così com'è. Qui, stiamo tentando di creare un array associativo attraverso un argomento in un metodo da una lista pass.
Inizialmente, abbiamo creato la funzione pippo().
All'interno di questo programma, abbiamo rimosso il termine "declare", che è un comando preconfigurato di Bash che ci consente di modificare o personalizzare gli attributi, i metodi della shell imbrattati alle variabili e dimostrare i valori di questi attributi all'interno del span del nostro terminale di comando della shell. Inoltre, può essere utilizzato per definire una variabile lunga. Infine, viene utilizzato per definire le variabili.
Abbiamo aggiunto il valore "fooval" all'array "arr".
La parola chiave "-A" viene utilizzata per creare il NOMI array associativo se supportato. Dobbiamo usare la lista/matrice come variabile globale, il che implica che solo un metodo, non uno script, può eseguire questa azione.
Abbiamo anche creato un altro array, chiamato "myarr", da usare come riferimento. Bash consente al nome di una variabile relativa arr di essere dissimile dal nome della variabile relativa myarr.
Successivamente, nell'ottava riga, abbiamo passato l'array "myarr" al Bash pippo() fungere da riferimento.
In passato, abbiamo usato il ciclo "for" per stampare sia gli array "arr" che "myarr" sul pippo() funzione.
Ora controlleremo il risultato di questo codice. Esegui il comando Bash per eseguire il codice sopra. Puoi vedere che l'array è stato restituito alla funzione e poi stampato.
$ script bash.sh
Esempio 2: restituzione di un altro array
Vediamo un altro esempio di restituzione di array a una funzione. Apri il tuo terminale di comando e crea un nuovo file chiamato "openvpn.log” utilizzando il toccare comando, come segue:
$ touch openvpn.log
Ora apri il file "openvpn.log" e scrivi il testo seguente in questo file, come mostrato. Salva questo file e chiudilo.
Ancora una volta, apri la shell dei comandi e crea un altro file chiamato "script.sh", usando il toccare comando per aggiungere lo script Bash al file.
$ touch script.sh
Quindi, apri lo "script.sh" e aggiungi il codice seguente in questo file così com'è. Salva e chiudi questo file. Questo script utilizzerà un metodo che legge valori/stringhe da un documento e restituisce un array:
- Dichiarare l'array: clients
- Assegna l'array restituito del metodo ai client dell'array
- Mostra array: clienti
Diamo ora uno sguardo dettagliato al funzionamento di questo script.
- Abbiamo dichiarato un array globale di "client" utilizzando la parola chiave "declare", seguita da "-A."
- Il readArray() la funzione è stata definita. In questa funzione, abbiamo dichiarato alcune variabili locali. La variabile locale “array” è vuota, ma “i” e “j” sono stati definiti con il valore 0 da utilizzare come iteratori.
- Usando la modalità di lettura, leggeremo il testo dal file usando gli iteratori per incrementare gli indici.
- La riga "clients[$((i++))]+=$LINE;" viene utilizzato per aggiungere le righe di testo alla variabile array "clients" definita a livello globale.
- Dopodiché, "j++" sta saltando sull'indice successivo.
- La variabile "$1" viene utilizzata per salvare e restituire l'array appena creato da "openvpn.log” file di testo.
- All'esterno della funzione, la stringa è stata dichiarata come "$string" e gli è stato assegnato un percorso di file come valore.
- Questa stringa è stata passata a readArray funzione come riferimento per leggere il testo da questo file.
- Successivamente, l'array "clients" è stato stampato e l'intero testo al suo interno è stato visualizzato in una riga.
- Ora mostreremo un messaggio che l'array non è più vuoto.
- Il ciclo "for" è stato utilizzato per convertire il contenuto dell'array "clients" nel tipo di array e dichiarare un indice per il contenuto utilizzando l'istruzione "echo "$i: $clients[$i]."
- Infine, abbiamo visualizzato un messaggio e stampato separatamente alcuni valori dell'array convertiti come una singola posizione indicizzata di un array.
Controlliamo ora l'output di questo script Bash. Esegui il comando Bash per eseguire lo "script.sh" file. Come puoi vedere, la prima istruzione echo stamperà tutto il testo da "openvpn.log", che è stato salvato nell'array "clients" come una riga. La seconda istruzione echo mostrerà il messaggio di stringa. La terza istruzione echo mostrerà l'array "clients" in forma indicizzata, poiché è stato appena convertito. Il quarto visualizzerà di nuovo un messaggio. L'ultimo mostrerà il contenuto dell'array "clients" individualmente.
Conclusione
Questo articolo ti ha mostrato come restituire array (in particolare array associativi) a una funzione usando il comando integrato "dichiara" con due esempi. Spero che questo articolo ti abbia aiutato a capire meglio questo argomento.