目录
1.基本概念
环境变量:用来进行系统运行环境配置的变量
如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但 是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。 环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性
2. 和环境变量相关的命令
1. echo: 显示某个环境变量值[重点]
2. export: 设置一个新的环境变量[重点]
3. env: 显示所有环境变量[重点]
4. unset: 清除环境变量
5. set: 显示本地定义的shell变量和环境变量
3.常见环境变量
我们输入env查看当前所有的环境变量
下面来做一个演示:
比如说,我想要运行一个creat程序,那么我就必须输入./creat。只输入creat就不行
会提示我们找不到
那么我们怎么做才能直接输出我们的程序呢?
很简单,那就是把我们程序当前的路径放入到PATH环境变量中。
输入:PATH=${PATH}:./ 就是把当前路径放入到PATH环境变量中
4. 通过系统调用获取或设置环境变量
const char* getenv(const cahr* name);获取指定环境变量的值
演示:
当我们只有使用set | grep 'MYVAL'才能查找到MYVAL,那就说明了MYVAL此时并不是环境变量,而是一个普通的变量。
这里我们用export进行环境变量声明,我们再运行程序就可以查找到了。
5.环境变量通常是具有全局属性的
环境变量通常具有全局属性,可以被子进程继承下去。
我们先回忆一下bash进程:
前面我们说过,子进程每次运行的pid都是在变化的,因为子进程每一次运行都是一次重启,但其父进程是不会变得,因为父进程是bash,是系统创建的命令解释器
当我们kill bash ,我们就会发现我们再输入什么任何命令都不会起作用了。
下面来理解环境变量具有全局属性:
首先我写了一个获取环境变量MYVAL的函数
接着我们运行这个函数,我们会发现找不到MYVAL这个值,但是当我们将MYVAL设置成环境变量并给予其赋值,我们再运行的话,就能找到MYVAL。
其实我们设置环境变量是在全局中的,也可以说是设置在父进程bash里面的,而我们运行./env程序就是bash的一个子程序,因为环境变量具有全局特性,可以被子进程继承,所有我们就能在bash的子进程./env中查找到MYVAL的值了。
总结一下:环境变量具有同一终端内的继承特性(父进程创建子进程的时候会将自己所拥有的环境变量都设置给子进程),基于这个特性环境变量有些时候会被用于设定一些程序的一些参数(在进程之间传递数据)。