首页 百科知识 变量作用域

变量作用域

时间:2022-10-09 百科知识 版权反馈
【摘要】:局部变量只在用户当前的shell生命期中有意义。如果在shell中启动另一个进程或退出,局部变量的值将无效。子Shell有自己的运行环境和变量,这些变量仅在子Shell范围内的特定环境下才能使用。子Shell中无法改变全局变量的值;若在子Shell中改变全局变量的值,实际是对全局变量在子shell中的副本进行更改,不影响父shell中全局变量的值;子Shell中局部变量的使用优先于全局变量。

10.6.2 变量作用域

(1)局部变量

局部变量只在用户当前的shell生命期中有意义。如果在shell中启动另一个进程或退出,局部变量的值将无效。

当注册Shell在接受到用户输入的命令(非内部命令)后,通常会派生出一个子Shell,由此子Shell负责解释执行该命令。子Shell有自己的运行环境和变量,这些变量仅在子Shell范围内的特定环境下才能使用。可以使用set命令查看当前shell的所有局部变量。

shell的运行环境可以改变,但子shell不能存取由父shell设置的局部变量,也不能改变父shell的变量值。

例如:

$cat vartest1

echo :$x:

$x=100

$vartest1

::

上例说明在父shell中定义的局部变量,在子shell中无效。

下面再举一例说明局部变量的作用仅限于定义它的shell:

$cat vartest2

x=60

echo :$x:

$x=10

$vartest2

:60:

$echo $x

10

(2)全局变量

全局变量是一种特殊的变量,可以被任何运行的子Shell来引用。全局变量通过export命令来定义,其格式如下:

export 变量列表

一旦变量被定义为全局变量,则对于以后的所有子Shell来说这些都是全局变量。子Shell中无法改变全局变量的值;若在子Shell中改变全局变量的值,实际是对全局变量在子shell中的副本进行更改,不影响父shell中全局变量的值;子Shell中局部变量的使用优先于全局变量。

例如:

$export g_var

g _var = "GLOBAL"

$cat test_var

export g_var l_var

g_var = "sub_shell:g_var"

l_var = "sub_shell:l_var"

echo $g_var $l_var

$test_var

sub_shell:g_var sub_shell:l_var

$echo $g_var :$l_var:

GLOBAL ::

$

可以将局部变量和全局变量作用域总结如下:

(1)任何没有用export命令定义过的变量是局部变量,子Shell不能存取父Shell的局部变量。

(2)子Shell中可以存取和修改父Shell的全局变量,但这种修改对于父Shell全局变量没有任何影响。

(3)在子Shell中用export命令定义的全局变量和对此变量的修改对父Shell变量没有影响。

(4)全局变量保持它的全局性,不仅能直接传递给它的子Shell,而且子Shell还能将它传递给子Shell的子Shell。

(5)在对变量赋值之前和之后的任何时候可以将该变量转换成全局变量。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈