javascript 局部变量 全局变量-Shell变量的范围:Shell全局变量、环境变量和局部变量

2023-10-06 0 4,090 百度已收录

Shell变量的作用域是Shell变量的有效作用域(可以使用的范围)。

在不同的作用域中,同名的变量不会互相干扰,就像A类有一个叫小明的朋友,B类有一个叫小明的朋友,虽然他们都叫小明(对应到变量名),因为类(对应作用域)不同javascript 局部变量 全局变量,所以不会混淆。 但如果同一个班有两个叫小明的朋友,就必须用“小明”“小明”这样的名字来区分。

Shell 变量的作用域可以分为三种类型: Shell 局部变量。 Shell也支持自定义函数,但是Shell函数与C++、Java、C#等其他编程语言函数的一个区别是,Shell函数中定义的变量也是全局变量,与在函数外部定义变量具有相同的效果。 请看下面的代码:

#!/bin/bash
#定义函数
function func(){
    a=99
}
#调用函数
func
#输出函数内部的变量
echo $a

输出结果:

99

a是在函数内部定义的,但是在函数外部也可以获取它的值,证明它的作用域是全局的,并不局限于函数内部。

如果希望变量的作用域限制在函数内,可以在定义时添加local命令,该变量就成为局部变量。 请看下面的代码:

#!/bin/bash
#定义函数
function func(){
    local a=99
}
#调用函数
func
#输出函数内部的变量
echo $a

输出结果为空,说明变量a在函数外无效,是局部变量。

Shell 变量的这一特性与 JavaScript 中的变量类似。 默认情况下,JavaScript 函数中定义的变量也是全局变量。 只要加上var关键字,它就变成了局部变量。

本节仅演示函数的定义和调用,对句子结构的细节没有过多解释。 我们将在“Shell函数”部分深入讲解。

Shell全局变量所谓全局变量是指在当前整个Shell进程中有效的变量。 每个Shell进程都有自己的作用域,互不影响。 Shell 中定义的变量默认为全局变量。

要实际演示不同 Shell 进程中全局变量的独立性,可以在图形界面中同时打开两个 Shell,或者使用两个终端远程连接服务器(SSH)。

首先打开一个Shell窗口,定义一个变量a并将形参设置为99,然后复制。 此时,在同一个Shell窗口中就可以正确复制变量a的值了。 然后打开新的Shell窗口,复制变量a的值,但结果为空,如图1所示。

图 1:打开两个 Shell 窗口

由此可见,全局变量a只在定义它的第一个Shell进程中有效,对新的Shell进程没有影响。 这个很容易理解,就像小王家和小徐家都有一台电视(变量名相同),但是小王家和小徐家的电视上播放的节目可以不同(变量值不同)。同时。

需要指出的是javascript 局部变量 全局变量,全局变量的作用范围是当前Shell进程,而不是当前Shell脚本文件。 它们是不同的概念。 打开一个Shell窗口会创建一个Shell进程,打开多个Shell窗口会创建多个Shell进程。 每个Shell进程都是独立的,有不同的进程ID。 在一个Shell进程中,可以使用source命令执行多个Shell脚本文件。 此时,全局变量在此类脚本文件中有效。

例如,有两个Shell脚本文件a.sh和b.sh。 a.sh的代码如下:

#!/bin/bash
echo $a
b=200

b.sh的代码如下:

#!/bin/bash
echo $b

打开 Shell 窗口并输入以下命令:

[c.biancheng.net]$ a=99
[c.biancheng.net]$ . ./a.sh
99
[c.biancheng.net]$ . ./b.sh
200

这三个命令都是在一个进程中执行的。 从输出结果可以发现,Shell窗口命令行中定义的变量a在a.sh中是有效的; a.sh中定义的变量b在a.sh中有效。 它在 b.sh 中也有效。 变量b的范围已经超过了a.sh的范围。

注意,Shell脚本必须在当前进程中运行,不能在新进程中运行。 不明白的读者请前往“执行Shell脚本”。

Shell环境变量全局变量只在当前Shell进程中有效,对其他Shell进程和子进程没有影响。 如果使用export命令导入全局变量,则该变量在所有子进程中都有效。 这称为“环境变量”。

创建环境变量的Shell进程称为父进程。 如果在父进程中创建了一个新进程来执行Shell命令,那么这个新进程就称为Shell子进程。 当Shell子进程形成时,它会继承父进程的环境变量供自己使用,因此环境变量可以从父进程传递给子进程。 不难理解,环境变量也可以传递给孙子进程。

注意,两个没有父子关系的shell进程之间是不能传递环境变量的,而且环境变量只能向上传递,不能向下传递,即“传给子进程,不能传给父进程”。

创建 Shell 子进程的最简单方法是运行 bash 命令,如图 2 所示。

图2:进入Shell子流程

可以通过exit命令逐层退出Shell。

下面演示环境变量的使用:

[c.biancheng.net]$ a=22       #定义一个全局变量
[c.biancheng.net]$ echo $a    #在当前Shell中输出a,成功
22
[c.biancheng.net]$ bash       #进入Shell子进程
[c.biancheng.net]$ echo $a    #在子进程中输出a,失败
[c.biancheng.net]$ exit       #退出Shell子进程,返回上一级Shell
exit
[c.biancheng.net]$ export a   #将a导出为环境变量
[c.biancheng.net]$ bash       #重新进入Shell子进程
[c.biancheng.net]$ echo $a    #在子进程中再次输出a,成功
22
[c.biancheng.net]$ exit       #退出Shell子进程
exit
[c.biancheng.net]$ exit       #退出父进程,结束整个Shell会话

可以发现,默认情况下,a在Shell子进程中是无效的; 使用export将a导出为环境变量后,就可以在子流程中使用了。

这些export a的方法都是在定义变量a之后将其作为环境变量导入。 如果想在定义的同时作为环境变量导入,可以写export a=22。

我们仍然指出,环境变量在Shell子进程中有效,但并不意味着它在所有Shell进程中都有效; 如果通过终端创建一个新的 Shell 窗口,它不是当前 Shell 的子进程。 环境变量对于这个新的 shell 进程仍然无效。 请看右图:

第一个窗口中的环境变量a在第二个窗口中无效。 环境变量也是临时的。 通过export导出的环境变量只对当前Shell进程及所有子进程有效。 如果顶层父进程被关闭,环境变量就会急剧消失,其他进程将难以使用。 ,所以环境变量也是临时的。

有读者可能会问,如果我想让一个变量在所有Shell进程中都有效,而不管它们之间是否有父子关系,该怎么办?

只有将变量写入Shell配置文件中才能达到这个目的! Shell进程每次启动时,都会执行配置文件中的代码,做一些初始化工作。 如果在配置文件中放置一个变量,则每次启动进程时都会定义该变量。 不知道如何更改配置文件的读者请点击“加载Shell配置文件”和“编写自己的Shell配置文件”。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 javascript javascript 局部变量 全局变量-Shell变量的范围:Shell全局变量、环境变量和局部变量 https://www.wkzy.net/game/198656.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务