你的shell在与服务器交互时,从shell会话中编译了多种类型的信息。它提供了关于shell行为和它对资源访问的信息。配置设置包含了其中的一些设置,而用户输入则决定了其他的设置。
通过这种方式,shell会跟踪所有的设置和信息以维护环境。Shell每次启动会话时都会建立一个环境,其中包含定义系统属性的变量。
Bash 打印所有环境变量和值
通过使用命令env或printenv,我们可以看到我们环境中的所有变量。因此,这里有以下命令和它的输出。
printenv

env

printenv和env都产生类似的结果。它们只是在执行某些任务的方式上有所不同。例如,当你使用printenv时,你可以用下面的命令看到特定变量的值。
printenv PATH

根据我们上面所学,子进程通常从父任务中继承环境变量,允许你轻松地覆盖或添加变量到它们。
Printenv显示,几个环境变量已经通过我们的系统文件和进程在没有我们输入的情况下被设置了。
你可以使用set命令来做这件事。在没有任何其他参数的情况下,输入set将得到一个环境变量、所有shell变量、shell函数和局部变量的列表。
set

大多数时候,这个列表是非常长的。所以,你可以使用下面的命令来获得较少的输出。
set | less

可能没有必要了解所有的Bash函数,比如说。
为了清理输出,我们可以指定以POSIX模式操作,这样就不会打印Shell函数。为了不改变任何当前环境,我们可以在一个子壳中运行这个程序。
(set -o posix; set)

有一些环境变量和shell变量必须在这里列出。
这些命令的输出不会与env或printenv的输出相匹配,所以我们不能只用这些比较来获得shell变量,但使用这些命令会给我们一个部分列表。
comm -23 <(set -o posix; set | sort) <(env | sort)

虽然这是真的,但由于printenv和env并不像他们那样引用字符串,所以一些环境变量可能仍然存在。
在你的会话中,你仍然会看到你设置的环境变量和shell变量。
这些变量有很多用途。这些技术提供了一种替代向文件写入修改的方法来设置持久的会话值。
常见的Linux变量
我们在Linux中使用printf/echo命令显示shell变量的值。
| 系统变量 | 命令 | 说明 |
| BASH_VERSION | BASH_VERSION | 这个变量包含bash的当前版本。 |
| 宿主名称(HOSTNAME | 主机名 | 计算机名称。 |
| CDPATH | CDPATH | cd命令的搜索路径。 |
| HISTFILE | HISTFILE | 命令历史被保存在这个文件中。 |
| HISTFILESIZE | HISTFILESIZE | 在历史文件中,这是最大的行数。 |
| HISTSIZE | HISTSIZE | 命令历史内存大小。默认情况下,它被设置为500。 |
| 主页 | 主页 | 当前用户的主目录。 |
| IFS | IFS | 内部字段分隔符在扩展后将字拆开,并通过内置的读取命令将行拆成字。 |
| 术语 | LANG | 这被任何没有特别选择以LC_开头的变量的类别所使用,以确定该类别的locale类别。 |
| PATH | PATH | 这是命令的搜索路径--Shell在以冒号为界的目录中搜索命令。 |
| PS1 | PS1 | 设置提示音。 |
| TMOUT | TMOUT | 默认读取内置的命令超时。 一个交互式的shell也会把秒的值解释为命令发出后提交的时间。它将在没有输入的情况下将用户注销。 |
| TERM | TERM export TERM=vt100 | 选择一个终端类型来登录。 |
| SHELL | SHELL | 登录的shell路径在此设置。 |
| DISPLAY | DISPLAY 出口DISPLAY=:0.1 | 显示名称X |
| 编辑器 | export EDITOR=/usr/bin/vim | 设置默认文本编辑器的名称。 |
结论
所以,这就是关于bash打印所有环境变量和数值的简要信息。我们已经包括了通过Linux终端查看环境变量的最佳细节。