Es gibt viele Gründe, ein BASH-Array wiederherzustellen:
- Die Verwaltung der Lebensdauer von Arrays ist einfacher, da sie lokal zugewiesen werden.
- Für eine Just-in-Time-Erreichung kann das Abrufen von Arrays aus Methoden hilfreich sein.
- Um Protokollalgorithmustechniken zu unterstützen, können die Namen von Methoden, die Arrays zurückgeben, verworfen werden.
Sie glauben vielleicht, dass Bash die Fähigkeit verliert, Funktionsarrays zurückzugeben. Das ist aber nicht ganz richtig. Es ist möglich, das resultierende Array per Referenz in eine Methode zu verschieben und dabei Hinweise von C/C++-Entwicklern zu nehmen. Eine solche Strategie ermöglicht es der Methode, weiterhin frei von Referenzen auf eine globale Variable zu sein. Der folgende Artikel zeigt klare Beispiele für diesen Fall.
Beispiel 1: Zurückgeben eines Arrays
Melden Sie sich bei Ihrem Linux-System an und öffnen Sie das Befehlsterminal, um fortzufahren. Wir werden eine Bash-Datei namens „script“ erstellen.sh“ mit dem berühren Befehl, um das Array mit der Bash-Funktion zurückzugeben. Das Skript lautet wie folgt:
$ Touch-Skript.Sch
Sie können die neu erstellte Datei im Zuhause Verzeichnis. Öffnen Sie diese Datei und schreiben Sie den angehängten Code unverändert hinein. Hier versuchen wir, ein assoziatives Array durch ein Argument in einer Methode aus einem Listendurchlauf zu erstellen.
Zunächst haben wir die Funktion erstellt foo().
In diesem Programm haben wir den Begriff „declare“ entfernt, bei dem es sich um einen vorkonfigurierten Bash-Befehl handelt, der es uns ermöglicht, die Attribute, die Methoden der Shell, die auf die Variablen verschmiert sind, zu ändern oder anzupassen und die Werte dieser Attribute innerhalb des zu demonstrieren Spannweite unseres Shell-Befehlsterminals. Darüber hinaus kann es verwendet werden, um eine lange Variable zu definieren. Schließlich wird es verwendet, um die Variablen zu definieren.
Wir haben den Wert „fooval“ zum Array „arr“ hinzugefügt.
Das Schlüsselwort „-A“ wird verwendet, um die NAMEN assoziatives Array, falls unterstützt. Wir müssen die Liste/das Array als globale Variable verwenden, was bedeutet, dass nur eine Methode, kein Skript, diese Aktion ausführen kann.
Wir haben auch ein weiteres Array namens „myarr“ als Referenz erstellt. Bash erlaubt, dass der Name einer relativen Variablen arr unähnlich ist vom Namen der relativen Variablen myarr.
Danach haben wir in der achten Zeile das Array „myarr“ an die Bash . übergeben foo() als Referenz fungieren.
In der Vergangenheit haben wir die „for“-Schleife verwendet, um sowohl die Arrays „arr“ als auch „myarr“ an die foo() Funktion.
Wir werden jetzt das Ergebnis dieses Codes überprüfen. Führen Sie den Bash-Befehl aus, um den obigen Code auszuführen. Sie können sehen, dass das Array an die Funktion zurückgegeben und dann gedruckt wurde.
$ Bash-Skript.Sch
Beispiel 2: Ein anderes Array zurückgeben
Sehen wir uns ein weiteres Beispiel für die Rückgabe von Arrays an eine Funktion an. Öffnen Sie Ihr Befehlsterminal und erstellen Sie eine neue Datei mit dem Namen "openvpn".log“ mit dem berühren Befehl wie folgt:
$ berühren openvpn.Log
Öffnen Sie nun „openvpn“.log“-Datei und schreiben Sie den folgenden Text in diese Datei, wie gezeigt. Speichern Sie diese Datei und schließen Sie sie.
Öffnen Sie erneut die Befehlsshell und erstellen Sie eine weitere Datei namens "script".sch“, mit dem berühren Befehl zum Hinzufügen des Bash-Skripts zur Datei.
$ Touch-Skript.Sch
Öffnen Sie als nächstes das „Skript“.sh“-Datei und fügen Sie den folgenden Code unverändert in diese Datei ein. Speichern und schließen Sie diese Datei. Dieses Skript verwendet eine Methode, die Werte/Strings aus einem Dokument liest und ein Array zurückgibt:
- Das Array deklarieren: client
- Weisen Sie das zurückgegebene Array der Methode den Array-Clients zu
- Array anzeigen: Kunden
Lassen Sie uns nun einen detaillierten Blick auf die Funktionsweise dieses Skripts werfen.
- Wir haben ein globales Array von „clients“ mit dem Schlüsselwort „declare“ gefolgt von „-A“ deklariert.”
- Das readArray() Funktion wurde definiert. In dieser Funktion haben wir einige lokale Variablen deklariert. Die lokale Variable „array“ ist leer, aber „i“ und „j“ wurden mit dem Wert 0 als Iteratoren definiert.
- Im Lesemodus lesen wir den Text aus der Datei, indem wir Iteratoren verwenden, um die Indizes zu inkrementieren.
- Die Zeile „clients[$((i++))]+=$LINE;“ wird verwendet, um die Textzeilen an die global definierte Array-Variable „clients“ anzuhängen.
- Danach springt „j++“ auf den nächsten Index.
- Die Variable „$1“ wird verwendet, um das gerade aus dem „openvpn“ erstellte Array zu speichern und zurückzugeben.log“-Textdatei.
- Außerhalb der Funktion wurde der String als „$string“ deklariert und als Wert mit einem Dateipfad versehen.
- Diese Zeichenfolge wurde an die . übergeben readArray Funktion als Referenz zum Lesen von Text aus dieser Datei.
- Danach wurde das Array „clients“ gedruckt und der gesamte Text darin in einer Zeile angezeigt.
- Jetzt zeigen wir eine Meldung an, dass das Array nicht mehr leer ist.
- Die „for“-Schleife wurde verwendet, um den Inhalt des Arrays „clients“ in den Array-Typ zu konvertieren und einen Index für den Inhalt mit der Anweisung „echo „$i: $clients[$i].”
- Schließlich haben wir eine Meldung angezeigt und einige konvertierte Array-Werte separat als einzelne indizierte Position eines Arrays gedruckt.
Lassen Sie uns nun die Ausgabe dieses Bash-Skripts überprüfen. Führen Sie den Bash-Befehl aus, um das „Skript“ auszuführen.sh“-Datei. Wie Sie sehen, druckt die erste echo-Anweisung den gesamten Text aus dem "openvpn".log“-Datei, die im Array „clients“ als eine Zeile gespeichert wurde. Die zweite echo-Anweisung zeigt die String-Nachricht an. Die dritte echo-Anweisung zeigt das Array „clients“ in indizierter Form an, da es gerade konvertiert wurde. Beim vierten wird wieder eine Nachricht angezeigt. Der letzte zeigt den Inhalt des Arrays „clients“ einzeln an.
Fazit
In diesem Artikel wurde anhand von zwei Beispielen gezeigt, wie Sie Arrays (insbesondere assoziative Arrays) mithilfe des integrierten Befehls „declare“ an eine Funktion zurückgeben. Ich hoffe, dass dieser Artikel Ihnen geholfen hat, dieses Thema besser zu verstehen.