一、概念
一般是指在操作系统中用来指定操作系统运行环境的一些参数。它具有某些特殊用途,在操作系统中通常具有全局属性,并且可以被子进程继承下去。
二、常见环境变量
环境变量名称 | 含义 |
---|---|
PATH | 指定命令的搜索路径 |
HOME | 指定用户的主工作目录(即用户登录到Linux系统中时,默认的目录) |
HISTSIZE | 保存历史命令记录的条数 |
SHELL | 当前shell,通常是 /bin/bash |
HOSTNAME | 主机的名称 |
三、相关命令
命令 | 用途 | 用法 |
---|---|---|
echo | 显示某个环境变量的值 | echo $环境变量名称 |
env | 显示所有环境变量 | env |
set | 显示本地定义的shell变量和环境变量 | set |
unset | 清除环境变量 | unset 环境变量名称 |
export | 设置一个新的环境变量 | export 环境变量名称=… |
四、代码中如何获取、修改环境变量
1. 命令行第三个参数
#include <stdio.h>
int main(int argc, char* argv[], char *env[])
{
int i = 0;
while(env[i] != NULL)
{
printf("%s\n", env[i]);
i++;
}
return 0;
}
2. 第三方变量:environ
#include <stdio.h>
int main(int argc, char* argv[])
{
extern char** environ;
// libc中定义的全局变量environ指向环境变量表,由于environ没有包含在任何头文件中,所以在使用时,要用extern声明
int i = 0;
while(environ[i] != NULL)
{
printf("%s\n", environ[i]);
i++;
}
return 0;
}
3. 系统调用
(1)getenv
- 函数原型: char *getenv(const char *name);
- 功能:在环境列表中查找环境变量,并返回指向相应值字符串的指针
- 返回值:返回指向环境变量内容的指针,如果不匹配,则返回NULL
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("PATH = %s\n", getenv("PATH"));
return 0;
}
(2)putenv
- 函数原型: int putenv(char *string);
- 功能:
添加或更改环境变量的值,参数 string 的形式为 name=value 。如果环境列表中不存在该环境变量,则将字符串添加到环境列表中;如果确实存在,则环境列表中的名称值将更改为value。由于参数 string 中的 value 会成为环境列表的一部分,因此更改字符串会改变环境列表。- 返回值:成功时返回零,如果出现错误,则返回非零
#include <stdio.h>
#include <stdlib.h>
int main()
{
putenv("USER=Tom");
printf("USER = %s\n", getenv("USER"));
return 0;
}
(3)setenv
- 函数原型: int setenv(const char *name, const char *value, int overwrite);
- 功能:
如果该环境变量 name 不存在,则会将环境变量名与值一起添加到环境列表中。如果环境列表环境中确实存在该环境变量,此时,如果 overwrite 不为0,则改变环境变量原有内容,原有内容会被改为参数 value 所指的变量内容;如果 overwrite 为0,则原有内容不变。- 返回值:成功时返回零,如果环境列表中没有足够的空间,则返回 -1
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("USER = %s\n", getenv("USER"));
setenv("USER", "Jerry", 0);
printf("USER = %s\n", getenv("USER"));
setenv("USER", "Jerry", 1);
printf("USER = %s\n", getenv("USER"));
return 0;
}
运行结果:
(4)unsetenv
- 函数原型: int unsetenv(const char *name);
- 功能:从环境列表中删除变量名,如果环境列表中不存在该环境变量 name,则该功能成功,并且环境列表不变
- 返回值:成功时返回零,出错时返回 -1
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("USER = %s\n", getenv("USER"));
unsetenv("USER");
printf("USER = %s\n", getenv("USER"));
return 0;
}
运行结果: