Bash常用内置变量介绍
Bash中有很多内置变量,这些变量不仅影响Bash的相关行为,也大大的方便了用户的常见操作。**Bash内置变量大体上包括两类,一类是传统Shell所具备的,另一类就是Bash所特有的。**下文将对Bash中的一些常用内置变量的含义及作用进行介绍。
传统Shell内置变量
传统Shell的内置变量有,CDPATH、HOME、IFS、MAIL、MAILPATH、OPTARG、OPTIND、PATH、PS1、PS2,其含义和作用如下表所示:
变量名 | 含义或作用 |
---|---|
CDPATH | 由冒号分隔的一系列目录,用于cd命令的搜索路径 |
HOME | 当前用户的主目录 |
IFS | 用来分隔字段的字符,一般多用于解决目录中包含空格的问题 |
如果这个变量设成一个文件名或目录名并且 MAILPATH 变量没有设置,Bash在指定文件中通知用户邮件的到达。 | |
MAILPATH | 一个用冒号分隔的文件名列表,shell周期性地从这个文件里检测新邮件。 |
OPTARG | getopts 内建命令处理的最后的选项参数的值 |
OPTIND | 最后一个由 getopts 内建命令处理的选项参数的索引号 |
PATH | 一个用冒号分隔的目录列表,shell从这些目录里寻找命令 |
PS1 | 主要提示符,默认值是 “'\s-\v$ '”,控制shell的提示符显示样式 |
PS2 | 次要提示符,默认值是 “'> '”,控制shell的提示符显示样式 |
对于以上内置变量,需要记住的是HOME、PATH和IFS,其它的在需要时查阅相关文档即可。
Bash内置变量
Bash的内置变量就有些多了,很多Bash特性的相关配置都以内置变量的形式提供用户选项。个人认为不需要知道全部,理解并记住常用且重要的几个即可。部分Bash内置变量的含义和作用见下表:
变量名 | 含义或作用 |
---|---|
auto_resume | 变量控制shell如何与用户交互和作业控制 |
BASH | 用于执行当前Bash实例的全路径 |
BASHOPTS | 冒号分隔的表示当前Bash开启的功能 |
BASHPID | 当前Bash进程的ID |
BASH_ALIASES | alias内置命令维护Bash内置的别名列表 |
BASH_ARGV | Bash进程的启动参数 |
BASH_CMDS | hash内置命令维护的Bash命令的哈希表 |
BASH_COMMAND | Bash当前执行的指令或即将执行的 |
BASH_COMPAT | Bash对传统Shell的兼容等级 |
BASH_ENV | Bash执行脚本前的启动文件路径名 |
BASH_VERSION | 当前Bash实例的版本号 |
BASH_VERSINFO | 只读变量数组,它的成员保存这个Bash实例的版本信息 |
COLUMNS | select内建命令来决定打印选择列表时终端宽度 |
COMP_LINE | 当前命令行 |
COMP_POINT | 指明相对于当前命令起点的当前光标位置 |
COMP_WORDS | 由当前命令行中单个词组成的变量数组 |
DIRSTACK | 保存当前目录栈内容的变量数组 |
EUID | 当前用户的数字有效用户ID |
GLOBIGNORE | 由冒号分隔的模板列表,描述在文件名扩展时忽略的对象 |
GROUPS | 数组变量,表示当前用户所在的组 |
HISTSIZE | 在历史列表中记录的最大命令数,默认为500 |
HOSTFILE | 包含与 /etc/hosts 格式相同的文件名,Bash需要补全主机名时读取 |
HOSTNAME | 当前主机的名字 |
HOSTTYPE | 描述运行Bash的机器型号的字符串 |
IGNOREEOF | 控制shell接收到一个 EOF 字符作为独立输入的行为 |
INPUTRC | Readline特性的初始化文件,覆盖默认的~/.inputrc |
LANG | 用于为任意没有特别选择用LC_开头的变量指明的设置决定场合设置 |
LC_ALL | 取代 LANG 的值并为任意其他 LC_ 变量指定一个区域种类 |
LC_COLLATE | 决定搜索文件名展开结果时使用的整理顺序,并决定在文件名展开和模式匹配里区域表达、等价类和处理序列的表现 |
LC_CTYPE | 决定在文件名展开和模板匹配里字符的解释和字符集的行为 |
LC_MESSAGES | 决定用于转换由 “$” 引导的双引号字符串的区域 |
LC_NUMERIC | 决定数字格式化的本地类别 |
LINENO | 当前执行的脚本或者Bash函数的行号 |
LINES | 内建命令 select 用来决定打印选择列表的列长度 |
MACHTYPE | 一个以标准的GNU CPU-COMPANY-SYSTEM 格式来充分描述运行Bash的系统的类型的字符串 |
MAILCHECK | shell从 MAILPATH 或 MAIL 变量里指定的文件中检查邮件的频度(秒) |
OLDPWD | 内建命令 cd 设置的之前的工作目录 |
OPTERR | 如果设置成1,Bash显示内建命令 getopts 生成的错误信息 |
OSTYPE | 一个描述运行Bash的操作系统的字符串 |
PPID | Bash父进程的进程ID |
PROMPT_COMMAND | 如果设置了,这个值解释为一个在打印每个基本提示符(PS1)之前执行的命令 |
PS3 | 这个变量的值被用作 select 命令的提示符,默认值是 “#? ” |
PWD | 内建命令 cd 设置的当前工作目录 |
RANDOM | 每次这个参数被引用时,生成一个0和32767之间的随机整数,给这个变量指定一个值作为随机数生成器的种子 |
SECONDS | 这个变量扩展为Bash运行的秒数 |
SHELLOPTS | 一个由冒号分隔的shell已经启用的选项列表 |
SHLVL | 新的Bash实例启动就增加一 |
TIMEFORMAT | 这个参数的值用来作为一个格式化的字符串用来指定以 time 保留字作为前缀的管道定时信息如何显示 |
UID | 当前用户的真实用户ID |
上表列出了部分Bash内置变量,更多更全可以参考Bash官方文档。对于Bash内置变量中,需要深刻理解的就是跟区域化相关的内置变量,即LANG和LC_。
总结
Bash的内置变量较多,部分为只读。对于Bash的轻度用户,几乎没有必要知道这些;运维人员,需要做到在对Bash的特性了解的基础上,能够快速的找到自己所需要的内置变量即可。少部分及其常用的内置变量,则需要深刻理解。