x=1
function f()
{
echo $x
}
x=2 f #2
function g()
{
x=3
a=4
echo $x
}
a=5
x=2 g #3
echo $x #1
echo $a #4
为什么输出是23.14?为什么函数f访问单行变量x而不是全局变量?为什么函数g创建全局变量x和a,但x不覆盖外部的全局变量?
为什么函数f访问一行变量x而不是全局变量?
因为指定一个变量作为命令的一部分,将它设置在该命令执行的动态范围内(仅)。
为什么函数g创建全局变量x和a,但x不覆盖外部的全局变量?
g
赋值给变量x
和a
。但是,在调用x
的上下文中,实际上是局部的,因为作为调用的一部分已经为该变量指定了一个值。a
不是这样,所以对它的赋值通常会影响shell环境。