Arbeiten mit benutzerdefinierten Rückgabewerten
Während Rückgabecodes nützlich sind, um Erfolg oder Misserfolg anzuzeigen, sind sie auf Zahlen zwischen 0 und 255 beschränkt. Um tatsächliche Daten aus Funktionen zurückzugeben, müssen wir andere Techniken verwenden.
Methode 1: Verwenden von Echo zum Rückgeben von Werten
Der häufigste Weg, um tatsächliche Werte aus Funktionen zurückzugeben, ist die Verwendung von echo oder anderen Ausgabebefehlen und die anschließende Erfassung dieser Ausgabe.
Erstellen wir ein Skript, um diese Technik zu demonstrieren:
cd ~/project/bash_functions
touch return_values.sh
Fügen Sie den folgenden Inhalt hinzu:
#!/bin/bash
## Function that returns a value using echo
get_username() {
echo "labex"
}
## Function that returns a calculated value
add_numbers() {
local sum=$(($1 + $2))
echo $sum
}
## Capture the returned values
username=$(get_username)
echo "The username is: $username"
result=$(add_numbers 5 7)
echo "The sum of 5 and 7 is: $result"
## You can also use the returned value directly
echo "Calculating again: $(add_numbers 10 20)"
Speichern Sie das Skript, machen Sie es ausführbar und führen Sie es aus:
chmod +x return_values.sh
./return_values.sh
Sie sollten folgende Ausgabe sehen:
The username is: labex
The sum of 5 and 7 is: 12
Calculating again: 30
Methode 2: Verwenden von globalen Variablen
Ein anderer Ansatz besteht darin, globale Variablen innerhalb der Funktion zu ändern:
touch global_return.sh
Fügen Sie den folgenden Inhalt hinzu:
#!/bin/bash
## Declare global variables
FULL_NAME=""
USER_AGE=0
## Function that sets global variables
set_user_info() {
FULL_NAME="$1 $2"
USER_AGE=$3
## Return success
return 0
}
## Call the function
set_user_info "John" "Doe" 30
## Use the global variables that were set by the function
echo "Full name: $FULL_NAME"
echo "Age: $USER_AGE"
Speichern Sie das Skript, machen Sie es ausführbar und führen Sie es aus:
chmod +x global_return.sh
./global_return.sh
Ausgabe:
Full name: John Doe
Age: 30
Methode 3: Rückgeben mehrerer Werte
Untersuchen wir, wie man mehrere Werte aus einer Funktion zurückgibt:
touch multiple_returns.sh
Fügen Sie den folgenden Inhalt hinzu:
#!/bin/bash
## Function that returns multiple values separated by a delimiter
get_system_info() {
local hostname=$(hostname)
local kernel=$(uname -r)
local uptime=$(uptime -p)
## Return multiple values separated by semicolons
echo "$hostname;$kernel;$uptime"
}
## Capture the output and split it
system_info=$(get_system_info)
## Split the values using IFS (Internal Field Separator)
IFS=';' read -r host kernel up <<< "$system_info"
## Display the values
echo "Hostname: $host"
echo "Kernel version: $kernel"
echo "Uptime: $up"
## Alternative method using an array
get_user_details() {
local details=("John Doe" "john@example.com" "Developer")
printf "%s\n" "${details[@]}"
}
## Capture the output into an array
mapfile -t user_details < <(get_user_details)
echo ""
echo "User information:"
echo "Name: ${user_details[0]}"
echo "Email: ${user_details[1]}"
echo "Role: ${user_details[2]}"
Speichern Sie das Skript, machen Sie es ausführbar und führen Sie es aus:
chmod +x multiple_returns.sh
./multiple_returns.sh
Die Ausgabe sollte zunächst Ihre Systeminformationen und dann die Benutzerdetails anzeigen:
Hostname: ubuntu
Kernel version: 5.15.0-1033-azure
Uptime: up 2 hours, 15 minutes
User information:
Name: John Doe
Email: john@example.com
Role: Developer
Der tatsächliche Hostname, die Kernel-Version und die Betriebszeit variieren je nach Ihrem System.
Diese Methoden zeigen verschiedene Möglichkeiten, Werte aus Funktionen zurückzugeben, die über einfache Rückgabecodes hinausgehen. Jeder Ansatz hat seine Vorteile, je nach Ihren spezifischen Anforderungen.