Alex_McAvoy

想要成为渔夫的猎手

Shell 环境变量

【环境变量的显示】

环境变量类似于高级程序语言中的全局变量,可以在创建他们的 Shell 及其派生出的任意子程序中使用

有些环境变量是用户创建的,而大多数环境变量是专用的,属于系统变量的一部分,使用 env 命令可以打印当前 Shell 环境下所有环境变量及其内容

除了环境变量外,还有一些与 Shell 操作接口有关的变量,以及用户自定义变量,此时可以使用 set 命令来列出当前 Shell 环境下的所有变量及其内容

常见的环境变量说明见下表

环境变量 说明
HOME 用户的主文件夹
SHELL 目前环境所使用的 Shell
HISTSIZE 历史记录所记录的条数
PATH 执行文件查找的路径,目录与目录间用冒号 : 分隔
MAIL 使用 mail 命令在收信时,系统读取的邮件信箱文件
LANG 语系数据,中文编码通常是 zh_CN.gb2312zh_CN.UTF-8
RANDOM 随机数变量,可通过该变量获取一个介于 0 到 32767 的随机数值

【语系相关的环境变量】

目前,大多数 Linux 都支持各国及地区代码,也支持大部分的语系,使用 locale -a 可以列出当前 Linux 环境所支持的语系代码

而对于系统所支持的语系环境,可以直接使用 locale 来列出与语系相关的环境变量与其内容

这些变量的含义如下表

语系相关的环境变量 说明
LANG 主语言的环境
LC_CTYPE 字符辨识的编码
LC_NUMERIC 数字系统的显示信息
LC_TIME 时间系统的显示数据
LC_COLLATE 字符串的比较与排序
LC_MONETARY 币值显示格式
LC_MESSAGES 菜单、错误信息等信息显示内容
LC_PAPER 页面显示内容
LC_NAME 姓名书写方式
LC_ADDRESS 地址书写方式
LC_TELEPHONE 电话号码书写方式
LC_MEASUREMENT 度量衡表达方式
LC_IDENTIFICATION 对 locale 自身包含信息的概述
LC_ALL 整体语系的环境

对于上述的与语系相关的环境变量,LANG 指定了所有与 locale 有关的变量默认值,但其优先级最低,而 LC_ALL 则指定了整体语系环境,其优先级最高,当设定了 LC_ALL 时,所有的与语系相关的环境变量都将被 LC_ALL 的值所取代,即有:

【进程相关性】

当登录 Linux 并取得一个 Shell 后,此时的 Shell 就是一个独立的进程,接下来在这个 Shell 中执行的任何命令都是由这个 Shell 所衍生出来的,此时这些被执行的命令就被称为子进程

在 Linux 中,当启动 Shell 后,操作系统会分配一个记忆块给 Shell 使用,此内存内的变量可以让子进程使用;当加载另一个 Shell,即启动子进程时,子进程会将父进程的环境变量所在的记忆块导入自己的环境变量中

因此,子进程会继承父进程的环境变量,同时子进程不会继承父进程的自定义变量

这就导致了原本的自定义变量在 Shell 进入子进程后会消失,直到离开子进程回到父进程后,才会出现

换个角度来说,如果能将自定义变量设为环境变量的话,那么就可以让该自定义变量继续存在于子进程中

使用 export 变量名 命令,即可令一个自定义变量变为环境变量,其实质是将自定义变量的内容写入环境变量所在的记忆块中,此外,若单独键入 export,则会将所有的环境变量显示出来

感谢您对我的支持,让我继续努力分享有用的技术与知识点!