Bash。可变的可见性和寿命
Bash. Variable visibility and lifetime
我在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 中声明的数组和变量显然被破坏了。
在第二种方式中,数组和变量被保存。
有没有人可以向我解释一下或者给我一份 link 合适的手册?
当你这样做时:
res=$(f1)
您创建一个子shell,在子shell 中执行f1
并将输出存储到变量$res
。在该子shell 中创建的任何变量在它关闭后都会丢失。
当你这样做时:
f1>/dev/null
您在当前 shell 内执行 f1
。在函数内创建的变量在全局范围内,因此可以随后访问。
我在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 中声明的数组和变量显然被破坏了。 在第二种方式中,数组和变量被保存。
有没有人可以向我解释一下或者给我一份 link 合适的手册?
当你这样做时:
res=$(f1)
您创建一个子shell,在子shell 中执行f1
并将输出存储到变量$res
。在该子shell 中创建的任何变量在它关闭后都会丢失。
当你这样做时:
f1>/dev/null
您在当前 shell 内执行 f1
。在函数内创建的变量在全局范围内,因此可以随后访问。