环境变量 env/export/set/unset

环境变量

环境变量 是 shell 用来存储有关 shell 会话和工作环境的信息(这也是它们被称作环境变量的原因),比如系统的名称、登录到系统上的用户名、用户的系统 ID (也称为 UID )、用户的默认主目录以及 shell 查找程序的搜索路径。这项特性允许你在内存中存储数据,以便程序或 shell 中运行的脚本能够轻松访问到它们。

在 bash shell 中,环境变量分为两类:

  • 全局变量

  • 局部变量

env 命令

env 命令用于显示系统中已存在的环境变量,以及在定义的环境中执行指令。

命令用法

$ env [OPTION]... [-] [NAME=VALUE]... [COMMAND [ARG]...]

其中:

  • [NAME=VALUE]:变量定义 —— 定义在新的环境中变量,定义多个变量定义用空格隔开。

  • [COMMAND [ARG]...]:指定要执行的命令和参数。

常用可选参数

参数

说明

-i, --ignore-environment

新开始一个空的环境变量列表

-u, --unset=NAME

从当前环境变量环境移除 NAME

export 命令

export 命令用于将 shell 变量输出为环境变量,或者将 shell 函数输出为环境变量。

命令用法

$ export [-fn] [name[=value] ...]
$ export -p

其中:

  • [name[=value] ...] 指定要输出或删除的环境变量

常用可选参数

参数

说明

-f

以函数名称作为变量名称

-n

删除指定的变量。实际上并未删除,只是不会输出到后续指令的执行环境中

-p

列出所有经过 export 得到的变量以及函数

set 命令

set 命令作用主要是显示系统中已经存在的shell变量,以及设置 shell 变量的新变量值。

使用 set 更改 shell 特性时,符号 "+" 和 "-" 的作用分别是打开和关闭指定的模式。

set 命令不能够定义新的 shell 变量。如果要定义新的变量,可以使用 declare 命令以 变量名=值 的格式进行定义即可。

命令用法

$ set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]

常用可选参数

参数

说明

-a

标记那些被修改过的或是通过 export 得到的变量

-b

(修改变量时)马上通知作业终止

-e

如果一个命令的退出状态不为 0,马上退出

-f

取消使用通配符

-h

自动记录函数的所在位置

-k

命令所给的参数都会被视为此命令的环境变量

-m

启动作业监视模式

-n

读取命令但不实际执行

-t

执行完随后的指令,即退出 shell

-u

当执行时使用到未定义过的变量,则显示错误信息

-v

显示 shell 所读取的输入值

-x

执行指令后,会先显示该指令及所下的参数

使用实例

# 先声明一个新的环境变量
$ declare myvariable = "CSharp"
# 使用 set 将新定义的变量输出为环境变量
$ set -a myvariable
# 查看新添加的环境变量
$ env | grep myvariable

unset 命令

unset 命令用于删除已定义的 shell 变量(包括环境变量)和 shell 函数。

unset 命令中引用环境变量时,记住不要使用 $

命令用法

$ unset [-f] [-v] [-n] [name ...]

注意, 1. 如果不指定 -f-v,默认是会当成先处理 shell 变量,如果失败就会处理 shell 函数。 2. unset 命令不能够删除具有只读属性的 shell 变量和环境变量。

常用可选参数

参数

说明

-f

仅删除函数

-v

仅删除变量

使用实例

# 删除指定的环境变量
gackle@machine:~$ unset -v mylove

使用 $ 的时机

在涉及环境变量名时,什么时候该使用 $,什么时候不该使用 $,实在让人摸不着头脑。 记住一点就行了:如果要用到变量,使用 $;如果要操作变量,不使用 $。 这条规则的一个例外就是使用 printenv 显示某个变量的值。

Last updated