gpt4 book ai didi

arrays - 从 Bash 函数返回数组

转载 作者:行者123 更新时间:2023-11-29 09:12:53 26 4
gpt4 key购买 nike

我无法理解如何有效地使用全局变量。根据我对 bash 的理解,每个变量都是全局变量,除非按照以下方式明确声明为局部变量:http://tldp.org/LDP/abs/html/localvar.html .因此,我的理解是,如果我构建这样的函数:

# 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
}

调用 is_alive_ping 函数后,我应该能够访问 active_ips 变量。像这样:

# ping ip range to find any live hosts
is_alive_ping ip_addr_range[@]
echo ${active_ips[*]}

stackoverflow 中的这个问题进一步强化了这一点:Bash Script-Returning array from function .但是,我对 active_ips 数组的回显没有返回任何内容。这让我感到惊讶,因为我知道该数组实际上包含一些 IP。关于为什么失败的任何想法?

最佳答案

declare 创建局部变量。使用 declare -g 使它们成为全局的,或者完全跳过 declare 关键字。

declare -ga active_ips
# or
active_ips=()

此外,您可以使用 += 附加到数组:

active_ips+=("$i")

关于arrays - 从 Bash 函数返回数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36120081/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com