什么是环境变量?
- 每个进程都有自己的环境环境变量
- 格式:“键=值”
- 进程可以通过环境变量访问计算机资源
- 终端输入env命令,可以查看环境变量列表
- 通过echo $name可以查看某个环境变量的值
环境变量的添加
- 例如,在终端输入例如 FOOD=chicken,表示当前进程增加名为“FOOD”值为chicken的环境变量。如果环境变量FOOD是存在的,则代表更改其值。通过echo $FOOD,可查看其值。这时FOOD是不显示在环境变量列表上的。
- 注意,在“=”左右不能加空格。
环境变量的类别
环境变量分为两类:
- 可以被子进程继承,显示在环境列表上的
- 不能被子进程继承,自定义变量
将自定义的环境变量显示在环境变量列表上
export name
删除环境变量
unset name
常见的环境变量
PATH环境变量
echo $PATH
该环境变量记录的是bash进程对命令的检索路径
格式:用":"分割多个路径。当在bash下输入命令的时候,首先在第一个路径找改命令的可执行程序,找到就执行,不再向后找;如果找不到,就去第二个路径找...,找到最后一个都找不到,就提示该命令不能找到的错误。
PS1自定义变量
echo $PS1
该环境变量决定了串口命令行的提示符内容
可以通过对PS1环境变量的设置来精简提示符内容
PS1='\W\$' W(大写):表示最后一个路径
只显示最后一级目录
有效范围
如果没有特殊操作,对环境的设置仅对当前的bash进程有效,开启新的终端,之前的操作不会被保留。
在家目录下有个名为.baserc的脚本文件,每次bash进程启动前,都会执行该脚本的内容。如果希望环境变量的设置对每个bash进程都有效,可以将环境变量写道该脚本文件中。然后执行source ~/.baserc命令,使得该文件生效。
环境变量表
环境变量表就是一个以NULL指针结束的字符指针数组,其中每个元素都是字符指针,指向一个空字符结尾的字符串,字符串就是形如“键=值”形式的环境变量。该指针数组的地址保存在全局环境变量environ中。
通过全局环境变量表指针environ可以访问所有环境变量
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 extern char **environ;
5
6 int main()
7 {
8 char **pp;
9
10 for(pp = environ; pp && *pp; ++pp) {
11 printf("%s\n", *pp);
12 }
13
14 return 0;
15 }
相关函数
获取某个环境变量值
#include <stdlib.h>
char *getenv(const char *name);
功能:根据环境变量名称获取其值
参数:name指针 环境名称字符串
返回值:成功返回对应的环境变量的值,失败返回NULL
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 int main(int argc, char *argv[])
5 {
6 char *env_value;
7
8 env_value = getenv(argv[1]);
9 printf("env_value = %s\n", env_value);
10
11 return 0;
12 }
添加或者修改某个环境变量值
#include <stdlib.h>
int setenv(const char *name, const char *value, int overwrite)
功能:添加或者修改环境变量
参数:name 环江变量的键
value 环境变量的值
overwrite 如果环境变量存在,传0保持原值不变,传非零表示替换以前值
返回值:成功返回0,失败返回非零
int unsetenv(const char *name)
功能:删除环境变量
参数:要删除的环境变量名
返回值:成功返回0,失败返回非0
int clearenv(void)
功能:清理环境变量 (调用该函数后,environ会被置为NULL)
返回值:成功返回0,失败返回非0
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5 int main(int argc, char *argv[])
6 {
7 char *env_value;
8 char *name, *value;
9 int overwrite;
10 int ret;
11
12 name = argv[1];
13 value = argv[2];
14 overwrite = atoi(argv[3]);
15
16 ret = setenv(name, value, overwrite);
17 if (ret)
18 printf("add env failed\n");
19
20 env_value = getenv(name);
21 printf("env_value = %s\n", env_value);
22
23 ret = unsetenv(name);
24 if (ret)
25 printf("del env failed\n");
26
27 env_value = getenv(name);
28 printf("env_value = %s\n", env_value);
29
30 return 0;
31 }
$gcc fun_env.c
$./a.out FOOD cheiken 0
env_value = cheiken
env_value = (null)