Gibt ein Array in Bash zurück
- Befehlsersetzung
- Verwenden Sie die Befehlssubstitution, um ein Array in Bash zurückzugeben
-
Verwenden Sie
IFS
, um ein Array in Bash zurückzugeben
Da Bash keine Arrays verarbeitet, kann die Rückgabe eines Arrays etwas schwierig sein. Es ist jedoch möglich, diese Einschränkung zu umgehen, indem Sie eine globale Variable oder eine Befehlssubstitution verwenden, um ein Array von einer Funktion zurückzugeben.
Dieser Artikel behandelt die Befehlsersetzung, eine Methode zum Zurückgeben eines Arrays in Bash, ohne globale Variablen zu benötigen.
Befehlsersetzung
Um zu verstehen, wie das funktioniert, müssen wir zuerst verstehen, was Befehlsersetzung ist und wie sie in Bash funktioniert.
Die Bash-Funktion namens Befehlssubstitution ermöglicht es, die Ausgabe eines Befehls anstelle des Befehls selbst zu verwenden. Dies geschieht, indem der Befehl in ein Paar Backticks (``) oder $()
eingeschlossen wird, wie folgt:
echo "The current date is: `date`"
Ausgang:
The current date is: Fri Nov 29 16:14:23 PST 2022
Der Befehl date
wird im obigen Beispiel ausgeführt und seine Ausgabe ersetzt den Befehl selbst. Dadurch können wir die Ausgabe eines Befehls direkt in einen String einbetten, was in vielen Situationen nützlich sein kann.
Verwenden Sie die Befehlssubstitution, um ein Array in Bash zurückzugeben
Sehen wir uns nun an, wie wir die Befehlssubstitution verwenden können, um ein Array von einer Funktion in Bash zurückzugeben.
Lassen Sie uns zuerst eine Funktion namens get_array
erstellen, die ein Array von Zahlen von 1 bis 10 zurückgibt und Befehlsersetzung verwendet. Rufen Sie dann die Funktion auf und speichern Sie die Ausgabe in einer Variablen – Ergebnis
– die wir drucken werden.
function get_array() {
local my_array=(1 2 3 4 5 6 7 8 9 10)
echo "${my_array[@]}"
}
result=$(get_array)
echo "The result is: $result"
Ausgang:
The result is: 1 2 3 4 5 6 7 8 9 10
In der obigen Funktion erstellen wir ein Array namens my_array
, das die Zahlen von 1 bis 10 enthält. Dann verwenden wir echo
, um das Array auszugeben, und schließen es in Anführungszeichen ein, um sicherzustellen, dass die Array-Elemente als einzelne Zeichenfolge erhalten bleiben. Danach rufen wir die Funktion get_array
auf und speichern ihre Ausgabe in der Variablen result
. Wir geben dann den Inhalt der Variable Ergebnis
aus, die das Array von Zahlen von 1 bis 10 sein sollte.
Verwenden Sie IFS
, um ein Array in Bash zurückzugeben
Sehen wir uns nun an, wie wir die Elemente des Arrays abrufen können. Da die Array-Elemente als einzelner String zurückgegeben werden, müssen wir die Variable IFS
(Internal Field Separator) verwenden, um den String in einzelne Elemente aufzuteilen.
Die Variable IFS
steuert, wie Bash einen String in Wörter oder Token aufteilt. Standardmäßig ist IFS
auf space
, tab
und newline
eingestellt, was bedeutet, dass bash einen String an jedem dieser Zeichen in Wörter aufteilt.
Um den von der Funktion get_array
zurückgegebenen String in einzelne Elemente aufzuteilen, müssen wir IFS
auf ein Leerzeichen setzen:
IFS=' '
result=$(get_array)
result_array=($result)
for i in "${!result_array[@]}"; do
echo "Element $i: ${result_array[$i]}"
done
Ausgang:
Element 0: 1
Element 1: 2
Element 2: 3
Element 3: 4
Element 4: 5
Element 5: 6
Element 6: 7
Element 7: 8
Element 8: 9
Element 9: 10
Im obigen Code setzen wir IFS
auf ein Leerzeichen, wodurch wir den von der Funktion get_array
zurückgegebenen String in einzelne Elemente aufteilen können. Das Ergebnis speichern wir dann in der Variablen result_array
und verwenden eine for
-Schleife, um die Elemente des Arrays auszugeben.
Schauen wir uns nun an, wie diese Methode ein Array von Strings anstelle eines Arrays von Zahlen zurückgeben kann.
Ändern wir zuerst die Funktion get_array
, um ein Array von Strings zurückzugeben:
function get_array() {
local my_array=("one" "two" "three" "four" "five" "six" "seven" "eight" "nine" "ten")
# Return the array using the command substitution
echo "${my_array[@]}"
}
In der obigen Funktion erstellen wir ein Array namens my_array
, das die Strings eins
bis zehn
enthält. Dann drucken wir das Array mit echo
und setzen es in Anführungszeichen, um sicherzustellen, dass die Array-Elemente als einzelne Zeichenfolge erhalten bleiben.
Lassen Sie uns nun untersuchen, wie wir die Funktion get_array
verwenden können, um das Array von Strings zurückzugeben:
IFS=' '
result=$(get_array)
result_array=($result)
for i in "${!result_array[@]}"; do
echo "Element $i: ${result_array[$i]}"
done
Ausgang:
Element 0: one
Element 1: two
Element 2: three
Element 3: four
Element 4: five
Element 5: six
Element 6: seven
Element 7: eight
Element 8: nine
Element 9: ten
Im obigen Code rufen wir die Funktion get_array
auf und speichern ihre Ausgabe in der Variablen result
. Anschließend zerlegen wir den String in einzelne Elemente und speichern diese in der Variable result_array
.
Schließlich verwenden wir eine for
-Schleife, um die Elemente des Arrays auszugeben.
Zusammenfassend lässt sich sagen, dass die Rückgabe eines Arrays in Bash schwierig sein kann, da Bash keine Arrays unterstützt. Es kann jedoch eine als Befehlsersetzung bekannte Methode verwendet werden, um eine Funktion zu haben.
Dazu wird das Array in Anführungszeichen gesetzt und mit echo
ausgedruckt und der resultierende String anschliessend mit der Variablen IFS
in einzelne Elemente zerlegt.
Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.
LinkedIn