在Linux系统中,环境变量是存储系统配置和用户信息的全局变量,它们影响进程的行为、程序的搜索路径、语言设置等,查看环境变量是系统管理、程序开发和日常运维的基础技能,本文将详细介绍Linux环境下查看环境变量的多种方法,包括常用命令的功能、用法及适用场景,并通过表格对比不同工具的特点,最后补充常见环境变量示例及修改方法,帮助读者全面掌握环境变量的查看技巧。

环境变量的基本概念
环境变量是进程运行时可访问的动态命名值,通常以KEY=VALUE的形式存储,如PATH=/usr/bin:/bin,变量名需遵循字母、数字和下划线的组合,且区分大小写,环境变量分为全局环境变量(对所有子进程生效)和局部环境变量(仅对当前shell进程生效),理解环境变量的作用范围和存储位置,有助于更好地管理和查看它们。
查看环境变量的常用方法
Linux提供了多种命令用于查看环境变量,不同命令的功能和输出格式略有差异,可根据需求选择合适的方法。
使用printenv命令查看所有或指定环境变量
printenv(或printenv)是最常用的环境变量查看工具,专门用于显示全局环境变量。
- 查看所有环境变量:直接运行
printenv,每行输出一个变量,格式为变量名=值,printenv # 输出示例: # XDG_SESSION_CLASS=user # XDG_SESSION_TYPE=x11 # VTE_VERSION=6200 # SHELL=/bin/bash # TERM=xterm-256color # USER=ubuntu # PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games # HOME=/home/ubuntu # LANG=en_US.UTF-8
- 查看指定环境变量:在
printenv后加上变量名,仅输出该变量的值,printenv PATH # 输出:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
若变量不存在,
printenv不返回任何内容(无错误提示)。
使用env命令查看环境变量
env(或environment)命令与printenv功能类似,主要用于显示或设置环境变量,但在查看环境变量时,两者输出结果基本一致。
- 查看所有环境变量:运行
env,输出格式与printenv相同:env | head -10 # 输出示例(同printenv,略)
- 查看指定环境变量:同样支持
env 变量名,例如env HOME输出/home/ubuntu。
env的核心优势在于临时设置环境变量后执行命令(如env VAR=value command),但单纯查看环境变量时,printenv更直观。
使用echo命令快速查看单个变量值
echo是Linux中最基础的输出命令,通过符号引用变量值,可快速查看单个环境变量。

- 语法:
echo $变量名,echo $HOME # 输出:/home/ubuntu echo $PATH # 输出:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
- 特点:仅输出变量的值,不显示变量名,适合快速确认变量内容,若变量未定义,
echo会输出空行(无错误提示)。
使用set命令查看所有shell变量(含环境变量和局部变量)
set命令的功能更全面,它显示当前shell中的所有变量,包括环境变量、局部变量(函数内定义的变量)和shell函数。
- 查看所有变量:直接运行
set较多,包含变量名和值,set | grep -E "^(BASH|HOME|PATH)" # 输出示例: # BASH=/bin/bash # BASH_VERSION=5.1.16(1)-release # HOME=/home/ubuntu # PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
- 与环境变量的区别:
set会显示局部变量(如BASH_ENV、FUNCNAME)和函数,而printenv仅显示全局环境变量。set | grep -E "^(BASH|HOME|PATH|FUNCNAME)" # 输出包含FUNCNAME(局部变量),而printenv不包含
若需从
set的结果中过滤出环境变量,可结合grep:set | grep -E "^[^[:space:]]+=" | grep -v "BASH_"(排除BASH相关的局部变量)。
使用export命令查看已导出的环境变量
export命令用于将局部变量导出为环境变量(使其对子进程生效),不带参数时,它会显示所有已导出的环境变量。
- 查看所有环境变量:运行
export,输出格式与printenv一致:export | head -5 # 输出示例: # declare -x XDG_SESSION_CLASS="user" # declare -x XDG_SESSION_TYPE="x11" # declare -x VTE_VERSION="6200" # declare -x SHELL="/bin/bash" # declare -x TERM="xterm-256color"
- 查看指定环境变量:需结合
grep,如export | grep PATH,输出:declare -x PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"。
export的输出中会包含declare -x标志,表示变量已被导出为环境变量。
使用declare命令查看变量详细信息(含类型和属性)
declare(或typeset)是bash内置命令,用于声明变量类型和属性,可显示所有变量(包括环境变量、局部变量)的详细信息。
- 查看所有变量:运行
declare,输出变量名、类型和值,declare | grep -E "^(HOME|PATH|BASH)" # 输出示例: # declare -x HOME="/home/ubuntu" # declare -x PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games" # declare -- BASH="/bin/bash"
- 查看环境变量:使用
-x选项,仅显示环境变量(等同于export -p):declare -x | grep PATH # 输出:declare -x PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
declare的优势是能显示变量的类型(如-x表示环境变量,-i表示整数),适合调试复杂的变量定义。
查看环境变量的命令对比
为更直观地选择工具,以下表格总结了各命令的功能、输出特点及适用场景:

| 命令 | 功能描述 | 常用选项 | 输出特点 | 适用场景 |
|---|---|---|---|---|
printenv |
显示所有/指定环境变量 | 无(变量名为可选参数) | 变量名=值,每行一个 |
查看全局环境变量 |
env |
显示环境变量,可临时设置变量 | VAR=value(临时设置) |
同printenv |
临时修改环境变量后执行 |
echo |
输出单个变量的值 | 无(需带引用变量) | 仅输出变量值 | 快速确认变量内容 |
set |
显示所有shell变量(含局部) | -a(导出变量)、-f(显示函数) |
包含环境变量、局部变量、函数 | 查看所有shell变量 |
export |
显示/导出环境变量 | -f(导出函数)、-p(显示格式) |
declare -x 变量名=值 |
设置和查看导出变量 |
declare |
显示变量详细信息(含类型) | -x(环境变量)、-p(格式化) |
显示变量类型、值、属性 | 调试变量定义 |
常见环境变量示例
了解常见环境变量的作用,有助于更好地理解系统行为:
PATH:命令搜索路径,冒号分隔多个目录,系统按顺序查找可执行文件。HOME:用户主目录,如/home/ubuntu,是cd命令的默认目标。USER:当前用户名,如ubuntu,用于标识用户身份。SHELL:当前使用的shell路径,如/bin/bash或/bin/zsh。LANG:系统语言环境,如en_US.UTF-8,影响程序的输出编码。PWD:当前工作目录,printenv PWD显示/home/ubuntu(等同于pwd命令)。TERM:终端类型,如xterm-256color,决定终端的颜色和功能支持。
环境变量的修改方法(补充)
虽然本文重点是“查看”,但了解修改方法有助于理解变量的来源:
- 临时修改:使用
export 变量名=值,仅对当前shell及其子进程生效,关闭shell后失效。export PATH=$PATH:/new/path。 - 永久修改:
- 用户级:编辑
~/.bashrc或~/.profile,添加export 变量名=值,保存后运行source ~/.bashrc生效。 - 系统级:编辑
/etc/profile或/etc/environment(需root权限),对所有用户生效,修改后重启系统或运行source /etc/profile生效。
- 用户级:编辑
相关问答FAQs
问题1:为什么set命令显示的变量数量比printenv多很多?
解答:printenv仅显示全局环境变量(可被子进程继承的变量),而set显示当前shell中的所有变量,包括环境变量、局部变量(如函数内定义的变量)和shell函数。BASH_VERSION是bash的局部变量,set会显示,但printenv不会;set还会输出函数定义(如myfunc () { echo "hello"; }),因此变量数量明显多于printenv。
问题2:如何区分一个变量是环境变量还是局部变量?
解答:可通过以下方法区分:
- 使用
export命令:运行export -p | grep "变量名",若有输出(如declare -x 变量名="值"),则是环境变量;否则为局部变量。 - 使用
declare命令:运行declare -p 变量名,若输出中包含-x标志(如declare -x 变量名="值"),则是环境变量;若显示declare -- 变量名="值"(无-x),则是局部变量。 - 使用
printenv测试:printenv 变量名能查到的是环境变量,查不到的是局部变量(仅当前shell可用)。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/29851.html