Gibt ein Array in Bash zurück

Olorunfemi Akinlua 20 Juni 2023
  1. Befehlsersetzung
  2. Verwenden Sie die Befehlssubstitution, um ein Array in Bash zurückzugeben
  3. Verwenden Sie IFS, um ein Array in Bash zurückzugeben
Gibt ein Array in Bash zurück

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 Akinlua avatar Olorunfemi Akinlua avatar

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

Verwandter Artikel - Bash Array