一、什么是环境变量
1. 基础概念
- 环境变量是操作系统 / Shell 提供的键值对
变量名=值,用于存储会话、系统配置信息,程序、脚本可直接读取使用。 - 作用:在内存持久存储数据,方便 Shell、应用程序调用。
- 命名规范:系统自带环境变量全大写;自定义局部变量建议小写,避免覆盖系统变量。
2. 两类环境变量
(1)全局环境变量
作用范围:当前 Shell + 所有子 Shell 都能访问。
查看命令:
env/printenv:只打印全局环境变量
echo $变量名:单独查看某一个变量值(必须加$)
示例:
1.分别执行env、printenv、set,对比输出差异
env
env
只输出全局环境变量(export 导出的变量、系统全局变量)
格式:变量名=值
不输出函数、局部自定义变量、Shell 内置临时变量
printenv
功能和env几乎完全一致,同样只打印全局环境变量
额外用法:可单独查询单个变量printenv HOME
输出内容、行数和 env 几乎无差别
set
输出全部内容:全局变量 + 局部自定义变量 + Shell 函数 + Shell 内置临时变量
输出内容远多于 env/printenv,行数最多
会打印你当前会话定义的局部变量、脚本函数等临时内容
2.父 Shell 查看 $PWD,进入子 Shell 再次查看,验证全局变量继承。
二、自定义用户变量
1. 创建局部变量(仅当前 Shell 生效)
语法规则:变量名=值
- 等号两侧不能有空格;
- 值包含空格时,用单 / 双引号包裹;
- 子 Shell 无法读取局部变量,退出终端变量直接消失。 示例:
练习:父 shell 定义局部变量,进子 shell 查看;子 shell 定义局部变量,退出后父 shell 查看,均无法读取。
2. 创建全局变量(子 Shell 也可访问)
步骤:先定义局部变量 →export导出为全局
my_var="全局变量测试" export my_var bash # 进入子shell echo $my_var # 子shell可读取 my_var="修改值" # 子shell修改变量 exit echo $my_var # 父shell值不变,子shell修改不影响父shell核心特点:子 Shell 修改全局变量,仅在自身内部生效,不会向上覆盖父 Shell 的变量值。
三、删除环境变量
命令:unset 变量名注意:操作变量时 ** 不加 $**;读取变量时才加 $。 示例流程:
- 父 shell 导出全局变量
export test=123 - 进入子 shell,
unset test,子 shell 中变量消失 - exit 退回父 shell,变量依然存在
- 父 shell 执行
unset test,变量彻底删除
练习步骤:
- 子 shell 读取父 shell 全局变量
- 子 shell unset 删除变量
- 退出子 shell,父 shell 变量仍存在
- 父 shell 执行 unset,变量彻底清除
四、系统默认 Shell 环境变量
1. 传统 Bourne 内置变量
表格
| 变量 | 作用 |
|---|---|
| CDPATH | cd 命令的搜索目录(冒号分隔) |
| HOME | 当前用户家目录 |
| IFS | 字段分隔符 |
| 用户邮箱文件路径 | |
| MAILPATH | 多邮箱文件列表 |
| OPTARG / OPTIND | getopts 命令专用参数 |
2. Bash 独有扩展变量
表格
| 变量 | 作用 |
|---|---|
| BASH | 当前 bash 程序完整路径 |
| PWD | 当前工作目录 |
| UID | 用户数字 ID |
| HOSTNAME | 主机名 |
| LINES | 终端可见行数 |
| GROUPS | 当前用户所属用户组数组 |
五、PATH 环境变量(重点)
1. 作用
Shell 输入命令时,自动在 PATH 内的目录查找可执行程序;目录用冒号:分隔。 查看 PATH:
2. 临时添加自定义目录
如果脚本所在目录不在 PATH,无法直接运行;可临时追加目录:
⚠️ 缺点:临时生效,重启终端 / 系统后失效。
配套练习
- 编写
hello.sh脚本; - 不修改 PATH,直接运行,提示命令不存在;
- 追加目录到 PATH 后,可直接运行;
- 重启终端,再次执行脚本失效;
- 权限不足时添加执行权限:
chmod u+x hello.sh
六、环境变量配置文件(永久生效配置)
登录 Shell 启动时,会按固定顺序读取配置文件,写入变量可永久生效。
1. 系统级全局配置(所有用户生效)
/etc/profile
系统所有用户登录都会加载;
内部会循环加载/etc/profile.d/*.sh下所有脚本;
适合配置全用户共用环境变量。
2. 用户级专属配置(仅当前用户生效)
登录时按优先级依次查找,找到第一个就停止读取:
~/.bash_profile~/.bash_login~/.profile上述文件内部一般会主动加载~/.bashrc(终端交互配置)。
使用技巧
把自定义环境变量、PATH 配置写入上述文件,新开终端自动生效; 立即生效不用重启:source 配置文件
七、数组变量
环境变量支持数组,可存储多个值,下标从 0 开始。
1. 数组定义与读取![]()
2. 修改、删除数组
数组练习
- 创建存储组员姓名的数组;
- 修改其中一位成员;
- 删除一名成员;
- 彻底删除整个数组。
本章小结
- Linux 环境变量分为全局变量(父子 shell 共享)、局部变量(仅当前 shell);
export将局部变量提升为全局,unset删除变量;- PATH 控制命令搜索路径,临时修改重启失效,写入配置文件永久生效;
- Shell 登录时自动加载
/etc/profile、用户家目录下.bash_profile/.profile等配置文件; - 环境变量支持数组,通过下标存取多组数据。