Ich habe Probleme zu verstehen, wie globale Variablen effektiv zu verwenden. Aus meinem Verständnis von Bash ist jede Variable global, es sei denn, sie wurde explizit als lokal deklariert, wie folgt: http://tldp.org/LDP/abs/html/localvar.html. So war mein Verständnis, wenn ich eine Funktion wie diese baue:Bash - Rückgabe Array von Funktion
# This function will determine which hosts in network are up. Will work only with subnet /24 networks
is_alive_ping() # Declare the function that will carry out given task
{
# declare a ip_range array to store the range passed into function
declare -a ip_range=("${!1}")
# declare active_ips array to store active ip addresses
declare -a active_ips
for i in "${ip_range[@]}"
do
echo "Pinging host: " $i
if ping -b -c 1 $i > /dev/null; then # ping ip address declared in $1, if succesful insert into db
# if the host is active add it to active_ips array
active_ips=("${active_ips[@]}" "$i")
echo "Host ${bold}$i${normal} is up!"
fi
done
}
ich soll in der Lage sein, den Zugang zu den active_ips
Variable zu erhalten, sobald der Anruf an is_alive_ping Funktion aufgerufen wurde. Wie so:
# ping ip range to find any live hosts
is_alive_ping ip_addr_range[@]
echo ${active_ips[*]}
Dies wurde durch diese Frage in Stackoverflow verstärkt: Bash Script-Returning array from function. Mein Echo für das Array active_ips gibt jedoch nichts zurück. Das ist überraschend für mich, weil ich weiß, dass das Array tatsächlich einige IPs enthält. Irgendwelche Ideen, warum das scheitert?
Vielen Dank für die schnelle Antwort:
Sie können aber auch mit
+=
zu Array anhängen! Ich werde es versuchen – NSaid