gpt4 book ai didi

linux - bash 。可变的可见性和生命周期

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:34:33 27 4
gpt4 key购买 nike

我对 bash 没有经验,我遇到了一个让我感到困惑的案例。这是这种情况的一个例子:

f1()
{
ar+=(1)
ar+=(3)
ar+=(2)
var="var value"
echo "0"
}

f2()
{

res=$(f1)
echo -------point 1--------
for i in ${ar[@]}; do
echo "El $i"
done
echo $var

echo -------point 2--------
f1>/dev/null
for i in ${ar[@]}; do
echo "El $i"
done
echo $var
}

f2

此脚本产生以下结果:

-------point 1--------

-------point 2--------
El 1
El 3
El 2
var value

如您所见,函数 f1 以两种不同的方式被调用,它们给出了截然不同的含义。在第一次调用中,在 f1 中声明的数组和变量显然被破坏了。在第二种方式中,数组和变量被保存。

有没有人可以向我解释一下或给我相应手册的链接?

最佳答案

当你这样做时:

res=$(f1)

您创建一个子 shell,在子 shell 中执行 f1 并将输出存储到变量 $res。在该子 shell 中创建的任何变量在它关闭后都会丢失。

当你这样做时:

f1>/dev/null

您在当前 shell 中执行 f1。在函数内创建的变量在全局范围内,因此可以随后访问。

关于linux - bash 。可变的可见性和生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39373474/

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