环境变量的全局属性
注意环境变量的全局属性和语言上的全局属性不一样,比如说你定义了一个全局变量,这个全局变量就可以被当前文件中所有函数访问,而环境变量的全局属性指的是它可以被子进程继承下去。
这里我们学习两个获取环境变量的函数 —— getenv(主文主要学习)、setenv。
其中使用getenv
需要包含<stdlib.h>
,它的参数是环境变量的名称,返回值是该变量对应的内容。
在命令行上运行的 “ 大部分 ” 指令,它的父进程都是bash
。不管是你的程序,还是系统的命令,都是bash
创建子进程,子进程执行你的命令(创建子进程我们知道了fork
,但子进程执行命令会在进程控制中会谈)。
命令行中,我们可以定义两种变量 ❓
-
本地变量。
MY_VAL
是在当前bash
内定义的变量,只能在当前 shell 命令行解释器内被访问,不可以被子进程继承。验证不可以被子进程继承,
./mytest
运行后就是bash
的子进程。export ???
其中
export MY_VAL
就可以将本地变量MY_VAL
导成环境变量,而环境变量可以被bash
的子进程mytest
继承。
env 可以查看所有的环境变量,如何查看所有本地变量 ??env
用于查看所有环境变量;set
用于查看所有本地变量、环境变量。
unset ???清除设置的环境变量。
echo 本地变量 ???
echo 是命令吗;echo 是命令的话需要创建子进程吗;如果 echo 创建了子进程它是怎么打到本地变量呢;上面不是说本地变量是不能被子进程继承的吗;“ 大部分 ”命令在命令行上运行,都是作为 bash 的子进程在运行。
这里想说的是 echo 当然是命令,echo 在执行的时候肯定是 bash 的子进程,那么感觉它作为子进程却能继承本地变量的原因是:我们上面说的是 “ 大部分 ” 命令,而其中像 echo、export、set、env 等命令,我们一般称之为
内建命令
,可以理解为 shell 程序内部的一个函数,也就是说 shell 在执行命令时,如果是内建命令,那么它直接调用内建命令对应的方法,如果不是内建命令,那么就会 fork 子进程。 -
环境变量。
环境变量具有 “ 全局属性 ”,它可以被子进程继承。
- 点赞
- 收藏
- 关注作者
评论(0)