Linux环境变量全面解析
一、什么是环境变量
1.1 概念理解
环境变量(Environment Variable) 是在操作系统或程序外部设置的变量,以 变量名=值 的形式存在。简单来说,环境变量就是系统用来存储一些“全局信息”的容器,任何程序都可以根据需要去读取这些信息。
打个比方:环境变量就像学校里的一块公告板,上面写着“今天食堂菜单”“下午3点开会”等信息。任何人(程序)路过都能看到,而且可以随时更新上面的内容。
1.2 环境变量的特征
由名称/值对组成,如 HOME=/home/zhang
可以在任何时间点进行创建、修改和删除
用于存储 shell 会话和工作环境的信息
允许程序或脚本快速访问这些数据
是一种持久存储数据的简便方法
1.3 默认的 Shell 环境变量
Bash Shell 继承自 Unix Bourne Shell,因此保留了许多经典的 Bourne 环境变量。同时,Bash 也提供了自己特有的变量。
系统环境变量通常使用全大写字母,以区别于普通用户的环境变量。例如:
| 变量名 | 含义 |
| HOME | 当前用户的主目录 |
| PSTH | 命令搜索路径 |
| SHELL |
当前使用的Shell类型 |
| USER |
当前用户名 |
| PWD |
当前工作目录 |
| OLDPWD | 上一个工作目录 |
二、全局变量和局部变量
在 Bash Shell 中,环境变量分为两大类:
2.1 全局环境变量
全局环境变量对当前 Shell 会话和所有由它生成的子 Shell 都是可见的。
bash
# 查看所有全局变量
env
printenv
# 查看单个全局变量(两种方式)
echo $HOME
printenv HOME
2.2 局部环境变量
局部环境变量只在定义它们的那个 Shell 进程中可见,子 Shell 无法访问。
Linux 系统没有专门只显示局部变量的命令。但可以使用 set 命令显示为某个特定进程设置的所有环境变量(包括局部、全局和用户自定义变量)。
bash
# 查看当前 shell 的所有变量
set
2.3 父子 Shell 中的变量传递实验
练习1:验证全局变量与局部变量的区别
bash
# 1. 在父 Shell 中创建局部变量
local_var="我是局部的"
echo $local_var # 输出:我是局部的
# 2. 进入子 Shell
bash
2echo $local_var # 输出为空(子 Shell 看不到局部变量)
exit # 退出子 Shell
# 3. 创建全局变量
export global_var="我是全局的"
echo $global_var # 输出:我是全局的
# 4. 再次进入子 Shell
bash
echo $global_var # 输出:我是全局的(子 Shell 能看到)
exit
关键结论:
局部变量 → 子 Shell 看不到
全局变量 → 子 Shell 能看到
在子 Shell 中修改全局变量,不影响父 Shell 中的值
三、用户如何创建、删除环境变量
3.1 创建局部变量
bash
# 语法:变量名=值(等号两边不能有空格!)
my_name="Zhang Jinyuan"
my_age=20
my_path=/home/zhang/test
# 查看变量
echo $my_name # 输出:Zhang Jinyuan
# 注意事项:
# ✅ 正确:var="Hello World"
# ❌ 错误:var = "Hello World"(等号两边有空格)
# ❌ 错误:var=Hello World(值有空格但未加引号)
变量命名规范:
系统环境变量:大写(如 PATH、HOME)
用户自定义变量和脚本变量:小写(避免与系统变量冲突)
3.2 创建全局变量(导出)
bash
# 先创建局部变量
my_global="我可以导出"
# 使用 export 导出为全局变量
export my_global
# 一步到位写法
export my_global="我可以导出"
3.3 删除环境变量
bash
# 使用 unset 命令(注意:不要加 $)
unset my_name
unset my_global
# 验证是否删除
echo $my_name # 输出为空
记忆技巧:
要用到变量的值 → 使用 $,如 echo $HOME
要操作变量本身 → 不使用 $,如 unset HOME
特殊情况:printenv HOME(例外,不加 $)
3.4 让变量永久生效
用户自定义的变量,在重启 Shell 后就会消失。要想永久保存,需要写入启动文件。
bash
# 编辑用户启动文件
vim ~/.bashrc
# 在文件末尾添加
export my_permanent="我永远不会丢"
# 保存后使配置立即生效
source ~/.bashrc
# 验证
echo $my_permanent
练习2:全局变量完整操作流程
bash
# 1. 父 Shell 中创建并导出
export test_var="原始值"
# 2. 进入子 Shell
bash
# 3. 子 Shell 中查看
echo $test_var # 输出:原始值
# 4. 子 Shell 中修改并重新导出
test_var="新值"
export test_var
echo $test_var # 输出:新值
# 5. 退出子 Shell
exit
# 6. 父 Shell 中查看(仍然是原始值)
echo $test_var # 输出:原始值
四、PATH 环境变量(重点)
4.1 什么是 PATH
当你在命令行输入一个命令(如 ls、bash、python)时,Shell 需要知道这个程序在哪个目录下。PATH 环境变量就定义了 Shell 搜索命令的目录列表。
bash
# 查看当前 PATH
echo $PATH
# 输出示例:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
PATH 中的目录用冒号(:) 分隔。
4.2 为什么有些命令可以直接输入,有些不行?
bash
# 像 bash、ls 这些命令,因为它们的所在目录(如 /bin)已经在 PATH 中
bash # 直接执行,没问题
ls # 直接执行,没问题
# 如果你在 /opt/myapp/bin 目录下有个程序叫 myapp
# 直接输入 myapp 会提示 "command not found"
myapp # ❌ 找不到
4.3 如何添加自定义目录到 PATH
方法一:临时添加(当前会话有效)
bash
export PATH=$PATH:/opt/myapp/bin
方法二:永久添加(重启不丢失)
bash
vim ~/.bashrc
# 在末尾添加
export PATH=$PATH:/opt/myapp/bin
# 使配置生效
source ~/.bashrc
4.4 PATH 操作注意事项
bash
# ✅ 正确:追加新路径
export PATH=$PATH:/新目录
# ✅ 正确:在前面添加路径(优先级更高)
export PATH=/新目录:$PATH
# ❌ 危险:不要这样写(会覆盖所有系统命令,导致系统瘫痪)
export PATH=/新目录
五、存放系统环境变量的文件
5.1 登录 Shell 的启动文件
当你登录 Linux 系统时,Bash Shell 会作为登录 Shell 启动,并按顺序读取以下启动文件:
| 文件路径 | 说明 |
| /etc/profile | 系统级主启动文件,所有用户登录时执行 |
| /etc/profile.d/*.sh |
系统级扩展配置目录 |
|
$HOME/.profile |
用户个人配置 |
| $HOME/.bashrc | 用户最常用的个人配置 |
|
$HOME/.bash_login |
用户登录配置(较少使用) |
| $HOME/.bash_profile | 用户登录配置(优先级最高) |
5.2 各文件的作用
/etc/profile:
系统默认的主启动文件
会遍历执行 /etc/profile.d/ 目录下的所有 .sh 脚本
修改需要 root 权限
~/.bashrc(最常用):
每次启动新 Shell 时都会执行
用于设置用户的别名、函数、环境变量等
是用户自定义配置的首选文件
~/.profile / ~/.bash_profile:
仅在登录 Shell 时执行
一般用来设置 PATH 等环境变量
5.3 实践:自定义永久环境变量
bash
# 方法:修改 ~/.bashrc(推荐)
echo 'export MY_CUSTOM_PATH="/home/zhang/mybin"' >> ~/.bashrc
source ~/.bashrc
echo $MY_CUSTOM_PATH
六、数组变量
6.1 什么是数组变量
Bash Shell 只支持一维数组。数组可以存储多个值,用空格分隔,并用括号 () 括起来。
bash
# 定义数组
team_members=(张三 李四 王五 赵六)
# 访问数组元素(索引从 0 开始)
echo ${team_members[0]} # 输出:张三
echo ${team_members[2]} # 输出:王五
# 显示整个数组
echo ${team_members[*]} # 输出:张三 李四 王五 赵六
6.2 数组的常用操作
bash
# 定义数组
students=(小明 小红 小刚 小丽)
# 1. 修改某个元素
students[1]="小美"
echo ${students[*]} # 输出:小明 小美 小刚 小丽
# 2. 删除某个元素(保留索引位置,值为空)
unset students[2]
echo ${students[*]} # 输出:小明 小美 小丽
echo ${students[2]} # 输出为空
# 3. 删除整个数组
unset students
echo ${students[*]} # 输出为空
6.3 练习3:数组完整操作
bash
# 1. 建立多组员名称数组
team=(张晋源 李小明 王大力 赵小华)
# 2. 查看数组
echo ${team[*]}
# 3. 更改一位成员
team[1]="李新宇"
# 4. 删除一位成员
unset team[3]
# 5. 删除整个数组
unset team
七、总结
7.1 知识框架图
Linux 环境变量
│
├── 什么是环境变量
│ ├── 名称/值对 (VAR=value)
│ └── 存储系统和工作环境信息
│
├── 变量分类
│ ├── 全局变量(env / printenv 查看)
│ └── 局部变量(set 查看)
│
├── 变量操作
│ ├── 创建:VAR=value(局部)/ export(全局)
│ ├── 删除:unset VAR
│ └── 永久化:写入 ~/.bashrc
│
├── PATH 变量
│ ├── 定义命令搜索目录
│ ├── 用 : 分隔多个目录
│ └── 追加:export PATH=$PATH:/新目录
│
├── 启动文件
│ ├── /etc/profile(系统级)
│ └── ~/.bashrc(用户级,最常用)
│
└── 数组变量
├── 定义:(值1 值2 值3)
├── 访问:${数组[索引]}
└── 操作:修改、删除、清空
7.2 核心命令速查表
| 操作 | 命令 |
| 查看所有全局变量 | env或printenv |
| 查看所有变量 | set |
| 查看单个变量值 | echo $VAR或printenv VAR |
| 创建局部变量 | VAR=value |
| 创建全局变量 | export VAR=value |
| 删除变量 | unset VAR |
| 追加PATH | export PATH=$PATH:/新路径 |
| 永久保存变量 | 写入~/.bashrc,执行source~/.bashrc |
7.3 注意事项汇总
1. 变量赋值时,等号两边不能有空格
2. 引用变量要加 $,操作变量不加 $
3. 系统变量用大写,自定义变量用小写
4. 修改 PATH 时要追加($PATH:),不要覆盖
5. 修改 ~/.bashrc 后记得 source 使生效












openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐
所有评论(0)