export 的核心作用是将当前 Shell 的局部变量标记为可传递,使其在子进程中可见;它不修改变量存储位置,仅通知系统在启动子进程时复制该变量,效力限于当前会话及衍生子进程,同级或父进程不可见。

直接用 export 命令就能把当前 Shell 中定义的局部变量变成环境变量,让它在子进程里也能被访问到。关键不是“提升”,而是“标记为可传递”——Shell 本身不会修改变量存储位置,只是告诉系统:这个变量要随新启动的子进程一起复制过去。
怎么操作:两步完成
先定义变量,再用 export 标记:
- 定义变量时不能有空格:
MY_VAR=value(不是MY_VAR = value) - 然后运行:
export MY_VAR或一步写成export MY_VAR=value
为什么只对子进程有效,不对父进程或同级终端生效
每个终端窗口、每个 sh 或 bash 进程都是独立的。export 只影响“从当前 Shell 启动的后续进程”,比如你运行一个脚本、执行 python 或 ls,它们都能读到这个变量;但另一个终端窗口是另一个进程,它根本不知道你这边设了什么。
- 新开一个终端 → 看不到你 export 的变量
- 在当前终端里运行
./myscript.sh→ 脚本能读到 - 在当前终端里运行
bash进入子 Shell → 子 Shell 也能读到
怎么验证是否成功导出
用下面任一命令检查:
-
export -p | grep MY_VAR—— 显示所有已导出变量,过滤出你要查的 -
env | grep MY_VAR—— 查看整个环境变量列表 -
echo $MY_VAR—— 确认值存在(注意:未 export 时 echo 也能显示,但子进程看不到)
常见误区提醒
别以为 export 后变量就“永久”了。它只在当前会话生命周期内有效:
- 关闭终端或退出登录 → 变量消失
- 想长期生效?得写进配置文件,比如
~/.bashrc或/etc/profile,然后source ~/.bashrc生效 - 脚本里 export 的变量,只对脚本内部及其调用的命令有效,脚本结束后不影响当前 Shell

















