1.基本概念
环境变量:
一般是指在操作系统中用来指定操作系统运行环境的一些参数
例如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。
常见的环境变量
- PATH:保存了可执行程序的搜索路径(其中各个路径之间采用
:
符号来分隔)- SHELL:保存了命令行解释器的名称(Linux中为BASH,一般在
/bin/bash
目录下)- HOME:指定保存了当前目录的家目录
碎片知识:使用
which + [命令]
可以查看该命令的路径
2.查看环境变量
-
echo $[环境变量]
:可以查看该环境变量所在的路径
例如:查看环境变量BASH的路径
-
env
:查看操作系统中所有的环境变量(以键值对的形式存在)
3.设置环境变量
首先每次设置环境变量的时候都有一个
固定的范式
:
export [环境变量的名称] = $[环境变量名称] : [新增路径]
例如,要添加PATH的路径到当前路径下
但是,这里设置的环境变量只是临时生效的,也就是说环境变量的设置有临时生效和永久生效两大类
1. 临时生效
export命令执行在了当前命令行中,只会在当前终端中生效。
2.永久生效
- 将export命令写到
~/.bashrc
或
~/.bash_profile
文件中去,这两个文件都是环境变量文件- 在写入到上面文件中后,要采用
sourc ~/.bashrc
或
sourc ~/.bash_profile
中重新加载环境变量文件即可
当打开一个新的终端时,就会读取环境变量文件中的内容,只有写到上面提到的两个文件中去,每次在启动终端的时候,都会被加载进去。
4. 环境变量的代码验证
首先,我们都知道在C语言程序中,main函数一直都有对应的参数,如:
int main( int argc, char* argv[], char* env[] )
- int argc:保存着命令行参数的个数
- char* argv[ ]:是一个指针数组,数组中的每一个元素都是char* ,他保存着具体的命令行参数的内容
- char* env[ ]:保存着环境变量的具体内容,需要知道的是他的组织格式是该数组最后的位置永远都保存着NULL
每个程序都会收到一张环境表,环境表是一个字符指针数组,每个指针指向一个以’\0’结尾的环境字符串
代码测试:
代码如下:
运行结果如下:
可见,argc在计算命令行参数的时候会将自己也计算在内
5.通过代码获取环境变量
-
上面刚说过的
char* env[]
方法
-
通过
getenv
函数获取特定的环境变量的值
-
通过
environ
参数进行获取环境变量的值
其中:
char * getenv(const char * name);
- name:为环境变量的名称
- 返回环境变量的值
- 头文件为:<stdlib.h>
extern char ** environ;
- environ参数是C库中定义的
- libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,所以在使用时 要用extern声明。
- extern的头文件为:<unistd.h>