环境变量是你在系统中定义的,可以被程序读取和使用的变量。

    写过程序的人,应该都知道程序里面有变量的概念,通过修改变量的值就可以改变程序的执行结果。

    环境变量也是一种变量,它是你在系统中定义的,可以被程序读取和使用的变量,环境变量可以是能被当前进程及子进程使用的全局变量,也可以是只能被当前进程使用的局部变量。

    例如,Linux的$LANG这个全局环境变量中存储了当前用户所处的语言环境,如果$LANG的值是"zh_CN.UTF-8",就说明是当前是中文环境,运行中的各程序(进程)就会根据这个环境变量使用中文界面。

    如果它的值是"en_US.UTF-8",就说明是英文环境,运行中的程序就会切换到英文界面。当然环境变量只是一个参考,如果运行程序不关心环境变量,或者系统中没有安装相应的语言包的话,那么,可能就不会显示你所希望的语言。

    下面是Linux系统中一些常见的环境变量:

 变量名   变量描述 
 PATH

 PATH环境变量对应的值是一些由冒号分隔开的路径,系统通过这些路径去查找可执行文件。

 

 当你在shell命令行中执行某个命令时,shell会根据PATH中定义的这些路径,去查找命令对应的可执行文件,如果找到就执行,没找到就抛出“命令找不到”的错误。

 USER  当前用户的用户名
 HOME   当前用户的主目录的路径
 UID  当前用户的用户ID
 TERM  默认的终端模拟器
 SHELL  用户默认使用的shell,一般是/bin/bash

查看环境变量的值

    要查看某个环境变量的值,可以使用以下命令格式:

echo $VARIABLE

    上面的VARIABLE是要查看的环境变量的变量名,需要注意的是,这些变量名是区分大小写的,如果大小写不同就可能会得到不同的值。下面是使用echo来显示环境变量的值的例子:

    我们还可以用env命令,将所有可以被子进程继承的全局的环境变量显示出来:

    如果在env中看不到某个变量,就说明这个变量只能被当前进程(在这里就是shell命令行的进程)使用,我们可以用export命令将某个变量导出成为全局变量,从而让shell创建的子进程(也就是shell执行的程序)也能使用到这个变量。

设置新的环境变量

    可以使用下面的命令格式创建一个自定义的环境变量:

VARIABLE_NAME=variable_value

    上面的VARIABLE_NAME表示需要创建的环境变量的变量名,variable_value表示该环境变量对应的值。要注意环境变量名是区分大小写的,另外,环境变量名通常使用大写。以下是创建环境变量的例子:

删除环境变量

    可以使用unset命令来删除某个环境变量,命令格式如下:

unset VARIABLE_NAME

    上面的VARIABLE_NAME表示要删除的环境变量的变量名,以下是删除环境变量的例子:

导出环境变量

    默认情况下,新建的环境变量只能被当前shell使用,如果要使其能被shell创建的子进程(也就是shell执行的程序)使用的话,可以通过export命令将其导出为全局的环境变量,例如:

[root@localhost ~]# NEWVARIABLE=12345
[root@localhost ~]# export NEWVARIABLE
[root@localhost ~]# env
..................................................
NEWVARIABLE=12345
..................................................
[root@localhost ~]# cat test/test.c 
#include <stdlib.h>
#include <stdio.h>

int main()
{
	char * val = getenv("NEWVARIABLE");
	if(val == NULL) {
		printf("not defined\n");
	}
	else
		printf("%s\n", val);
}
[root@localhost ~]# gcc test/test.c 
[root@localhost ~]# ./a.out 
12345
[root@localhost ~]# 

    上面先创建了一个NEWVARIABLE环境变量,然后通过export将其导出为全局环境变量,这样在env中就可以看到这个变量了,同时在C编写的test.c对应的a.out程序执行时,也能读取并显示出这个环境变量的值。

    如果没用export导出的话,上面a.out执行时就会显示not defined,也就是找不到环境变量:

[root@localhost ~]# unset NEWVARIABLE
[root@localhost ~]# NEWVARIABLE=12345
[root@localhost ~]# ./a.out 
not defined
[root@localhost ~]#

    上面我们重新创建了NEWVARIABLE环境变量,但是这次我们没有用export来导出该变量,这样它就只对当前shell起作用,而对shell创建的子进程,本例中就是运行中的a.out程序,就不起作用了,上面就显示了"not defined"信息。

小结

    通过环境变量,我们可以控制程序在操作系统中的行为。以下是本节介绍过的和环境变量相关的操作:

 命令   描述 
 echo $VARIABLE   显示某个环境变量的值 
 env  显示所有全局的环境变量。
 VARIABLE_NAME=variable_value   创建一个新的环境变量
 unset VARIABLE_NAME  删除一个环境变量
 export VARIABLE_NAME  导出一个环境变量,使其成为可以被子进程使用的全局变量。

 

上下篇

下一篇: Linux中的ssh,ping,ftp,telnet远程登录及通信相关的命令

上一篇: 在Linux命令行中使用正则表达式

相关文章

Linux中使用tar命令备份数据

Linux系统GRUB手动安装方法详解

Linux中的anacron命令用法详解

Linux的磁盘配额是什么,磁盘配额概述

Linux中使用edquota命令:修改用户(群组)的磁盘配额

Linux磁盘配额启动的前期准备(设置挂载参数usrquota和grpquota)