导入
探索环境变量和Shell变量
学习环境和 shell 变量的基本知识。
变量分为两种类型:环境变量和 shell 变量。环境变量是在当前 shell 会话中定义的,可供执行的任何程序使用。环境变量通常用于控制程序的行为。例如,我们可以设置一个 LANG 环境变量,让其他程序根据该变量来决定与用户交流时使用的语言。Shell 变量与此类似,但它们仅在当前 shell 中有效,不会传递给程序或子进程。我们可以将环境变量理解为全局变量,而 shell 变量则是局部变量。
环境变量
env 命令可以显示所有已设置的环境变量。由于输出内容较多,我们将其通过管道传给 less 命令进行分页查看:
1$ env | less
请使用下方终端练习这些命令。
Terminal
在输出结果中,可以看到许多环境变量。以下是其中几个变量的作用:
USER和LOGNAME变量存储当前用户的用户名。PWD变量保存当前工作目录的完整路径。TERM变量定义终端输出模式,终端软件利用它来判断可用的字体、颜色及其他功能。SHELL变量指定当前使用的 shell。在此情况下,它是位于/bin/bash的 Bash shell。HOME变量存储当前用户主目录的路径。当我们不带参数运行cd命令时,就会使用这个值。PATH变量包含一系列目录,操作系统会按顺序搜索这些目录以定位可执行程序。
Shell 变量
env 命令仅显示环境变量。若要同时查看环境变量和 shell 变量,可以使用 set 命令。该命令会输出 Bash 中的环境变量、shell 变量以及函数,输出内容可能非常庞大,有时并不需要全部查看。
1$ set -o posix; set; set +o posix
请使用下方终端练习这些命令。
POSIX 是一组标准,旨在确保不同操作系统之间的兼容性。
Terminal
上述命令将 set 命令配置为在 POSIX 模式下运行,该模式不会显示函数。然后执行 set 命令,并恢复原始行为。我们可以进一步简化为以下写法:
1$ (set -o posix; set)
请使用下方终端练习这些命令。
Terminal
括号中的语句告诉 Bash 在子进程中执行命令,从而保持当前 shell 的设置不变。这样就不需要手动恢复默认行为。关于子进程的更多内容,请参见 在子进程中运行命令。
遗憾的是,由于 env 和 set 命令的输出方式限制,目前没有简单的方法仅显示 shell 变量。我们只能通过获取 set 的输出,再从中排除 env 返回的内容来实现。