环境变量 env/export/set/unset
环境变量
环境变量 是 shell 用来存储有关 shell 会话和工作环境的信息(这也是它们被称作环境变量的原因),比如系统的名称、登录到系统上的用户名、用户的系统 ID (也称为 UID )、用户的默认主目录以及 shell 查找程序的搜索路径。这项特性允许你在内存中存储数据,以便程序或 shell 中运行的脚本能够轻松访问到它们。
在 bash shell 中,环境变量分为两类:
全局变量
局部变量
env 命令
env
命令用于显示系统中已存在的环境变量,以及在定义的环境中执行指令。
命令用法
其中:
[NAME=VALUE]
:变量定义 —— 定义在新的环境中变量,定义多个变量定义用空格隔开。[COMMAND [ARG]...]
:指定要执行的命令和参数。
常用可选参数
参数 | 说明 |
-i, --ignore-environment | 新开始一个空的环境变量列表 |
-u, --unset=NAME | 从当前环境变量环境移除 |
export 命令
export
命令用于将 shell 变量输出为环境变量,或者将 shell 函数输出为环境变量。
命令用法
其中:
[name[=value] ...]
指定要输出或删除的环境变量
常用可选参数
参数 | 说明 |
-f | 以函数名称作为变量名称 |
-n | 删除指定的变量。实际上并未删除,只是不会输出到后续指令的执行环境中 |
-p | 列出所有经过 |
set 命令
set
命令作用主要是显示系统中已经存在的shell变量,以及设置 shell 变量的新变量值。
使用 set
更改 shell 特性时,符号 "+" 和 "-" 的作用分别是打开和关闭指定的模式。
set
命令不能够定义新的 shell 变量。如果要定义新的变量,可以使用declare
命令以变量名=值
的格式进行定义即可。
命令用法
常用可选参数
参数 | 说明 |
-a | 标记那些被修改过的或是通过 |
-b | (修改变量时)马上通知作业终止 |
-e | 如果一个命令的退出状态不为 0,马上退出 |
-f | 取消使用通配符 |
-h | 自动记录函数的所在位置 |
-k | 命令所给的参数都会被视为此命令的环境变量 |
-m | 启动作业监视模式 |
-n | 读取命令但不实际执行 |
-t | 执行完随后的指令,即退出 shell |
-u | 当执行时使用到未定义过的变量,则显示错误信息 |
-v | 显示 shell 所读取的输入值 |
-x | 执行指令后,会先显示该指令及所下的参数 |
使用实例
unset 命令
unset
命令用于删除已定义的 shell 变量(包括环境变量)和 shell 函数。
在
unset
命令中引用环境变量时,记住不要使用$
命令用法
注意, 1. 如果不指定 -f
或 -v
,默认是会当成先处理 shell 变量,如果失败就会处理 shell 函数。 2. unset
命令不能够删除具有只读属性的 shell 变量和环境变量。
常用可选参数
参数 | 说明 |
-f | 仅删除函数 |
-v | 仅删除变量 |
使用实例
使用 $
的时机
$
的时机在涉及环境变量名时,什么时候该使用 $
,什么时候不该使用 $
,实在让人摸不着头脑。 记住一点就行了:如果要用到变量,使用 $
;如果要操作变量,不使用 $
。 这条规则的一个例外就是使用 printenv
显示某个变量的值。
Last updated