env 命令详解
更新时间:2026-08-28。本文是「一个命令一个文档」系列,属于 Shell 内建命令族(见Shell 内建命令)。它既能列出环境,也能"临时给某个命令换个环境"跑。
env 干两件事:不带参数时打印当前所有环境变量;带参数时,在(可选修改后的)环境下运行一条命令。和 export(见export)不同,它不修改当前 shell,只影响那一条命令。
一、查看环境
bash
env # 列出全部环境变量(KEY=value 每行一个)
env | grep PATH # 只看某个变量
env无参等价于打印环境块,常配合 grep 查某个变量当前值。它只显示"已导出的环境变量",不含 shell 局部变量——这点区别于set。
二、临时为某命令设变量
bash
env LANG=C ls # 用 LANG=C 环境跑 ls(不影响当前 shell)
env DEBUG=1 ./app # 给 app 临时注入 DEBUG=1这是
env最实用的姿势:不想 export 污染当前 shell,只让某一条命令看到特定变量。比先 export 再unset干净。
三、清空环境:-i
bash
env -i /usr/bin/env bash # 几乎清空环境启动新 bash(最小环境)
env -i PATH=/usr/bin python script.py # 只保留 PATH 跑脚本
-i(ignore)启动一个几乎空的环境,只保留你显式指定的变量。排查"环境变量污染导致程序异常"时很有用:用-i配最小变量集,确认问题是否来自环境。注意完全空环境可能连命令都找不到,至少给个PATH。
四、env 与 export 的区别
bash
export VAR=1; ./app # 改了当前 shell 环境,之后所有子进程都受影响
env VAR=1 ./app # 只这条命令受影响,当前 shell 不变一句话:export 改当前 shell(持久、影响后续所有命令),
env VAR=x cmd只改这一条命令(隔离、不影响 shell)。临时跑用env,长期用 export。
相关命令
一句话总结
env = 查看/临时设环境跑命令:无参列出全部环境变量;env VAR=val cmd 只给这条命令设变量、不污染当前 shell(和 export 改全局相对);env -i 清空环境跑最小环境,排查"环境被污染";/usr/bin/env 常被脚本 shebang 用来找解释器。