目录
基本概念
环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性
当我们执行系统配置好的命令的时候,我们输入指令的前面不需要指明路径,系统会自动地查找这条指令,找到就停下 。
常见环境变量
- PATH : 指定命令的搜索路径
- HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)
- SHELL : 当前Shell,它的值通常是/bin/bash。
查看环境变量方法
echo $NAME //NAME:你的环境变量名称
测试HOME
用root和普通用户,分别执行 echo $HOME ,对比差异
获取环境变量
命令行第三个参数envp
#include<stdio.h> #include <unistd.h> int main(int argc, char *argv[],char *envp[]) { //char *envp[]:指针数组 for(int i=0; envp[i];i++) { printf("envp[%d]->%s\n",i,envp[i]); } return 0; }
![]()
通过第三方变量environ
libc中定义的全局变量 environ 指向环境变量表 ,environ 没有包含在任何头文件中 , 所以在使用时 要用 extern 声明#include<stdio.h> #include <unistd.h> int main(int argc, char *argv[],char *envp[]) { extern char **environ; //environ[i] *(environ+i) for(int i=0; environ[i];i++) { printf("environ[%d]->%s\n",i,environ[i]); } return 0; }
系统调用获取或设置(函数)
getenv()
putenv()
以后补充
补充概念
本质就是内存级的一张表,这张表由用户在登录系统的时候,进行给特定用户形成属于自己的环境变量表。环境变量中的每一个,都有自己的用途:有的是进行路径查找的,有的是进行身份认证的,有的进行动态库查找的,有的是用来进行确认当路径等等,每一个环境变量都有自己特定的应用场景,每一个元素都是kv的。环境变量对应的数据从哪来??系统相关配置文件中读取进来的
引例1——export hello
我们导入了一个hello到环境变量表内
由此可见环境变量可以被所有相关的子进程继承的——环境变量具有全局性
引例2——hello1
![]()
未有export定义,其能echo打印,其被bash记录了下来,但是没有被添加到环境变量表内而已,这种变量称做本地变量,本地变量只在shell内部有效,不能被子进程继承;用export导入一下即可