在 CentOS / Linux 中,env 和 export 都和环境变量有关,但作用、用途和层级不同。下面用通俗方式说明它们的区别。
export 是 shell 内置命令,用于把变量导出为环境变量。
MY_VAR=hello
export MY_VAR
或合并写:
export MY_VAR=hello
bash
echo $MY_VAR
✅ 子 shell 可以访问
❌ 父 shell 或新终端不能访问
env 是 一个外部程序(/usr/bin/env),用于:
env
输出当前所有环境变量(类似 printenv)。
env VAR1=123 VAR2=abc command
示例:
env JAVA_HOME=/usr/java bash
✅ 只在 command 运行期间有效
❌ 不会影响当前 shell
| 对比项 | export | env |
|---|---|---|
| 类型 | shell 内置命令 | 外部命令 |
| 主要用途 | 导出变量给子进程 | 查看变量 / 临时运行程序 |
| 是否影响当前 shell | ✅ 是 | ❌ 否 |
| 是否影响子进程 | ✅ 是 | ✅ 仅对指定命令 |
| 能否永久生效 | ❌ 否 | ❌ 否 |
env 能设置永久变量env A=1
❌ 没意义,变量立刻消失
export 能影响其他终端export A=1
❌ 只对当前 shell 及其子进程有效
✅ 永久生效要写:
/etc/profile
~/.bashrc
~/.bash_profile
export PATH=$PATH:/usr/local/bin
env LANG=en_US.UTF-8 python3 app.py
env
export 是“把变量交给子进程”,env 是“临时给命令一个环境或查看环境”。
如果你愿意,我也可以结合 CentOS 7 / 8 的 systemd、crontab、sudo 环境变量问题 给你讲更实战的例子。