一、环境变量的概念
1. 环境变量的含义
环境变量一般是指操作系统中指定运行环境的一些参数,即系统预定义的参数。它相当于一个指针,想要查看变量的值,需要加上“$”符号。
环境变量是bash shell的特性,用来存储有关shell会话和工作环境的信息。允许在内存中存储数据,以便运行在shell上的程序和脚本访问。这些数据可以是用来识别用户、系统、Shell的特性以及任何其它需要存储的数据。
2. 环境变量的分类
- 按作用的范围分类
在Linux中的变量,可以分为环境变量和本地变量:
环境变量:相当于全局变量,存在于所有的Shell中,具有继承性
本地变量:相当于局部变量,只存在于当前Shell中,本地变量包含环境变量,但非环境变量不具有继承性
2.按生存周期分类
永久性环境变量:需要修改配置文件,变量永久生效
暂时性环境变量:使用export定义,关闭Shell后失效
3. 环境变量的组织方式
每个程序都有一张环境表,环境表是一个字符指针数组,每个指针指向一个以 “\0” 结尾的环境字符串。main函数的第三个参数就是环境表的地址。
二、常见的环境变量
- PATH
PATH变量指定命令的搜索路径。
例如:
从中可以看出,在当前目录下,PATH的值。它表示在当前目录下执行的每一条指令的搜索路径,每个目录以冒号隔开。当执行一条指令时,系统就会从系统文件中去寻找,找到了就执行;否则不执行。
- HOME
该变量指定用户的主工作目录,即用户登录到Linux系统时,默认的目录。
- 普通用户下的工作目录
- 超级用户下的工作目录
因此我们可以得出一个结论:环境变量是一个变量,它的值随着用户的不同而变化。
- HISTSIZE
该变量查看Linux系统保存历史命令的数目。
说明当前Linux系统中最多保存10000条历史命令。 - LOGNAME
该变量指定显示当前的用户名。 - HOSTNAME
该变量显示当前主机名称。
6.SHELL
该变量显示用户当前使用的解析器。
三、获取或设置环境变量
1. 通过命令获取或设置环境变量
- echo
该命令用于显示某个环境变量的值。
格式:
echo $【变量名】
- env
该命令显示所有的环境变量。
例如: - set
set命令显示本地定义的shell变量和环境变量。
例如: - export
export命令指定设置一个新的环境变量。
- 查看不存在的环境变量:
- 使用export创建一个新的环境变量:
【注意】使用export定义的环境变量是暂时性环境变量,关闭Shell后失效。
- unset
unset 命令功能是清除指定的环境变量。
例如: - readonly
该命令用于设置只读的环境变量。
例如:
【注意】将环境变量设置为只读模式后,就不能对其进行修改或者删除操作,只有直到用户退出之后才会失效。
2. 通过代码获取环境变量
- 通过main函数的第三个参数,环境表地址数组指针获取环境变量。
代码如下:
#include<stdio.h> int main(int argc, char *argv[], char *env[]) { int i = 0; for(; env[i]; ++i) { printf("%s\n", env[i]); } return 0; }
结果:
【注意】main函数的三个参数分别是:
- 第一个参数:argc是个整型变量,表示命令行参数的个数(含第一个参数)。
- 第二个参数:argv是个字符指针的数组,每一个元素一个字符指针,指向一个字符串。这些字符串就是命令行中的每一个参数(字符串)。
- 第三个参数:envp是字符指针的数组,数组的每一个原元素是一个指向一个环境变量(字符串)的字符指针。
2.通过第三方变量environ获取环境变量
- 代码如下:
#include<stdio.h> int main() { extern char **environ; int i = 0; for(; environ[i]; ++i) { printf("%s\n", environ[i]); } return 0; }
结果:
3. 通过系统调用获取或修改环境变量
通常用getenv和putenv函数来访问特定的环境变量,而不是用environ变量。但是,如果要查看整个环境,则必须使用environ指针。
例子如下:
#include<stdio.h> #include<stdlib.h> int main() { char *env = getenv("MY_ENV"); printf("%s\n", env); return 0; }
通过代码执行的结果可以得知:利用 " export MY_ENV=200 ",导出的环境变量可以被继承下去;而 " MY_ENV=100 ",导出的本地变量不具有继承性。