env命令可查看当前shell所有已导出的环境变量,输出简洁的KEY=VALUE格式,不包含shell内部变量或函数,适合脚本解析和排查配置是否生效。

用 env 查看当前 shell 的全部环境变量
env 命令只输出「导出过的」变量(即真正作为环境变量传递给子进程的),不包含 shell 内部变量(如 PS1、HISTSIZE)。它输出简洁、无修饰,适合脚本解析。
- 输出是键值对格式:
KEY=VALUE,每行一个 - 不显示空值变量(比如
FOO=会被输出,但未声明的变量不会出现) - 不受当前 shell 类型限制(bash/zsh/sh 都可用),但只反映执行时的快照
直接运行:
env
用 printenv 查看指定或全部环境变量
printenv 和 env 功能高度重叠,但更专注「查询」:支持按名查单个变量,也支持无参列出全部。
- 查单个:
printenv PATH
—— 比echo $PATH更安全,避免 shell 展开干扰(比如变量含换行或空格时) - 查全部:
printenv
—— 输出顺序和env一致,但某些系统(如较新 GNU coreutils)会按字母排序 - 注意:
printenv不显示未导出的变量,这点和env完全一致
用 set 查看所有 shell 变量(含自定义未导出变量)
这才是看到「自定义变量」的关键命令。set 输出当前 shell 中所有变量(包括函数),无论是否 export 过。
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
- 包含环境变量 + shell 局部变量(如
myvar=abc未 export 的) - 输出含函数定义(以
() {开头),若只想看变量可加| grep -v "()" - 变量值中含特殊字符(如换行)时,
set会用单引号包裹,比echo更可靠
常用过滤写法:
set | grep '^[a-zA-Z_][a-zA-Z0-9_]*='—— 排除函数和内置状态行
为什么 echo $VAR 有时没反应?常见陷阱
这不是命令失效,而是变量本身未定义、为空、或未导出。
-
echo $NONEXIST输出空行(不是报错),容易误判为“有值但为空” -
echo $HOME能输出,但echo $MYPATH没反应 → 很可能MYPATH根本没声明,或声明后忘了export MYPATH - 在子 shell 或新终端里看不到父 shell 中未 export 的变量(例如在脚本里
FOO=bar; ./other.sh,other.sh读不到FOO)
验证变量是否存在且非空:
[ -n "${MYPATH+set}" ] && echo "defined" || echo "undefined"
环境变量和 shell 变量的边界很薄,但影响真实行为。导出与否、作用域层级、shell 类型差异(bash vs dash)、甚至是否在登录 shell 中初始化,都会让同一个变量在不同上下文里“消失”——别只依赖 echo 判断。

















