一、环境变量的基本概念
环境变量是系统提供的一组name = value形式的变量,不同的环境变量有不同的用户,通常具有全局属性。
二、常见环境变量
1、PATH : 指定命令的搜索路径。

路径之间用分号(:)分隔。
为什么有些指令可以直接执行,不需要带路径,而我们的二进制程序需要带路径才能执行呢?

将我们的程序所在路径加入环境变量PATH中,export PATH=$PATH:当前程序所在路径。
注意:等于号(=)左右两边不能有空格。

这样就可以用mycmd来执行我们的二进制程序了,不需添加额外的路径。
注意:当我们关闭Xshell后重新启动时,之前的修改就没有了,即上述命令仅在当前会话中生效。

2、HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)。
普通用户:

超级用户:

~ 和 HOME 指向的是同一个位置。
3、SHELL : 当前Shell,它的值通常是/bin/bash。

三、和环境变量相关的命令
1、echo:显示某个环境变量值

2、export:设置一个新的环境变量


3、env:显示所有的环境变量

4、unset:清除环境变量

原本在箭头处的环境变量不存在了。

5、set:显示本地定义的shell变量和环境变量
仅展示部分截图。

四、环境变量的组织方式

每个程序都会收到一张环境变量表,环境变量表是一个字符指针数组,每个指针指向一个以'\0'结尾的环境字符串。
五、如何通过代码获取环境变量
1、命令行参数

为什么要有命令行参数呢?
为指令、工具、软件等提供命令行选项的支持。


两张核心向量表:
1)命令行参数表:char *argv[](argc为表中字符串的个数)
2)环境变量表:char *env[]
2、通过第三方变量environ获取

全局变量environ指向环境变量表,environ没有包含在任何头文件中,所以在使用时要用extern声明。
3、通过系统调用获取指定的环境变量


六、环境变量通常是具有全局属性的
我们所运行的进程都是子进程,bash本身在启动的时候,会从操作系统的配置文件中读取环境变量的信息,子进程会继承父进程的环境变量。

显而易见,子进程继承了父进程的环境变量。
七、本地变量和内建命令

**1、本地变量:**只会在本bash内部有效,不会被继承。
添加export子进程就会继承父进程的环境变量,不添加export就不会被子进程继承。
2、两批命令:
1)常规命令:通过创建子进程完成的。eg: ls, env
2)内建命令:bash不创建子进程,而是由自己亲自执行,类似于bash调用了自己写的,或者系统提供的函数。eg: cd , echo, export
