5.2 Bash 变量(Bash Variables)
这里介绍的变量是专用于 Bash 的,其它 shell 不会对其进行特殊处理。
Bash 使用的变量中有一小部分在其它章节进行说明,例如作业控制工具中用于控制的变量参见 7.3《作业控制变量》。
_ (“$_”,下划线)
在 shell 启动之时,设置为用于调用 shell 的路径名,或传入环境中正在执行的 shell 脚本,或参数列表。在启动之后,扩展为在前端执行的上一简单命令扩展后的最后一个参数。也会设置为用于调用每一个命令执行的完整路径名,并将该命令导出放入环境中。当检查邮件时,该变量保存的是邮件文件名。
BASH
用于执行当前 Bash 实例的完整路径名。
BASHOPTS
以冒号分隔的已开启的 shell 选项列表。在列表中的每一个单词是使用“-s”选项执行的 shopt 内建命令显示的可用参数(参见 4.3.2《内建命令 shopt》)。出现在该变量中的选项,都是在使用 shopt 命令时显示为“on”的选项。如果当 Bash 启动时该变量存在于环境中,在该列表中的每一个 shell 选项会在 Bash 读取任何启动文件之前开启。该变量为只读变量。
BASHPID
扩展为当前 Bash 的进程 ID。在某些情况下,该变量不同于“$$”。例如,在不须要 Bash 进行重新初始化的子 shell 中。对 BAHSPID 进行赋值是不会产生任何作用。如果释放了 BASHPID,其会失去特殊属性,即使之后重置该变量。
BASH_ALIASES
是一个关联数组变量。其成员是由内建命令 alias 维护的内部别名列表(参见 4.1《Bourne Shell 内建命令》)。添加到该数组的元素都会出现在别名列表中;然而,释放数组元素不会使别名从别名列表中移除。如果释放了 BASH_ALIASES,其会失去特殊属性,即使之后重置该变量。
BASH_ARGC
一个数组变量。其值是当前 Bash 执行调用堆栈的每一个框架中的参数个数。当前子任务(shell 函数或使用“.”或 source 执行的脚本)的参数个数是在堆栈顶部。当执行一个子任务时,传入参数的个数压栈到 BASH_ARGC 中。shell 只有在扩展 debugging 模式(参见内建命令 shopt 的 extdebug 选项)时才设置 BASH_ARGC。在 shell 开始执行脚本之后设置 extdebug 选项,或在未设置 extdebug 选项时引用此变量,都会使其值产生不一致。
BASH_ARGV
该变量在当前执行的 Bash 调用堆栈中包含所有参数的数组变量。最后一个调用子任务的最终参数是在堆栈的顶部;最初调用的第一个参数是在底部。当一个子任务执行时,将给出的参数压栈到 BASH_ARGV 中。只有当 shell 在扩展 debugging 模式时才设置 BASH_ARGV 变量。关于扩展 debugging 模式可参考内建命令 shopt 的 extdebug 选项。在 shell 已经开始执行一个脚本之后设置 extdebug 选项,或当 extdebug 未设置时引用该变量,都会引起其值的不一致性。
BASH_ARGVO
当引用时,该变量扩展为 shell 或 shell 脚本的名称(等同于变量“$0”;可参考 3.4.2《特殊参数》中关于特殊参数“0”的说明)。对 BASH_ARGVO 进行赋值也会对“$0”进行赋值。如果释放了 BASH_ARGVO,其会失去特殊属性,即使后继对其重新设置。
BASH_CMDS
其值是一个关联型数组变量。数组成员与命令的内部哈希表保持一致。哈希表是由内建命令 hash(参见 4.1《Bourne Shell 内建命令》)进行维护的。对数组添加的元素也会出现在哈希表中;然而,释放当前数组中的元素不会移除哈希表中相应的命令。如果释放了 BASH_CMDS,其会失去特殊属性,即使后继对其重新设置。
BASH_COMMAND
当前执行的命令或即将执行的命令。除非 shell 执行的命令是作为捕获的结果,在这种情况下,其会是在捕获时执行的命令。如果释放了 BASH_COMMAND,其会失去特殊属性,即使后继对其重新设置。
BASH_COMPAT
该变量的值是用于设置 shell 的兼容级别。可参见 6.12《Shell 兼容模式》中对于多兼容级别和其相关作用的说明。其值是期望的兼容级别,可以是一个小数(例如,4.2)或一个整数(例如,42)。如果释放或将 BASH_COMPAT 设置为空字符串,则将兼容级别设置为当前版本的默认级别。如果其值被设置为一个无效的兼容级别值时,shell 会打印出错信息并将其设置为默认的兼容级别。可用的兼容级别值可参考 6.12《Shell 兼容模式》。例如,4.2 和 42 都是有效的值,其对应“shopt”命令的“compat42”选项并且设置兼容级别为 42。当前版本也是一个有效的值。
BASH_ENV
如果在调用 Bash 执行一个脚本时设置了该变量,其值扩展为启动文件名并在执行脚本前对其进行读取。参见 6.2《Bash 启动文件》。
BASH_EXECUTION_STRING
Bash 调用选项“-c”的命令参数。
BASH_LINENO
该变量为一个数组变量。其成员对应的是被调用的数组变量 FUNCNAME 中的成员在源文件中的行编号。“${BASH_LINENO[$i]}”(或如果引用到另一个 shell 函数中,是“${BASH_LINENO[$i-1]}”)是调用的函数“${FUNCNAME[$i]}”在源文件“${BASH_SOURCE[$i+1]}”中的行编号。使用变量 LINENO 来得到当前的行编号。
BASH_LOADABLES_PATH
变量存储一个以冒号作为分隔符的目录列表。该列表是 shell 用于查找由 enable 命令指定的动态可加载的内建命令。
BASH_REMATCH
该变量是一个数组变量。其成员是由条件命令“[[”的二元操作符“=~”分配给的值(条件命令参见 3.2.5.2《条件结构》)。下标为 0 的元素是匹配到整个正则表达式的字符串部分。下标为 n 的元素是匹配到第 n 次小括号形式的子表达式的字符串部分。
BASH_SOURCE
该变量为一个数组变量。其成员是对应数组变量 FUNCNAME 中定义的函数的源文件名。shell 函数“${FUNCNAME[$i]}”定义在文件“${BASH_SOURCE[$i]}”中并且从“${BASH_SOURCE[$i+1]}”调用。
BASH_SUBSHELL
当 shell 在环境中开始执行时,在每一个子 shell 或子 shell 环境中该值会按增量 1 增加。初始值为 0。如果释放 BASH_SUBSHELL,其会失去它的特殊属性,即使后继对其重新设置。
BASH_VERSINFO
该变量为一个只读数组变量。其成员保存着该 Bash 实例的版本信息。该数组成员所分配的值如下:
BASH_VERSINFO[0] 主版本号(release)。
BASH_VERSINFO[1] 次版本号(version)。
BASH_VERSINFO[2] 补丁级别。
BASH_VERSINFO[3] Build 版本。
BASH_VERSINFO[4] 发布状态(如,beta1 等)。
BASH_VERSINFO[5] 变量 MACHTYPE 的值。
BASH_VERSION
当前 Bash 实例的版本号。
BASH_XTRACEFD
如果该变量设置为对应一个有效文件描述符的整数,当开启了“set -x”时,Bash 会将产生的追踪输出写入到该文件描述符。这使得将追踪输出从诊断信息和报错信息中分离出来。当 BASH_XTRACEFD 释放或重新分配一个新值时,会关闭该文件描述符。释放 BASH_XTRACEFD 或给其分配一个空字符串,会使追踪信息发送到标准报错流。注意,将 BASH_XTRACEFD 先设置为 2(标准报错文件描述符),再释放它,则会关闭标准报错流。
CHILD_MAX
设置用于 shell 记忆的退出子状态数值。Bash 不允许该值降低超过 POSIX 授权的最小值,并且不能超过最大值(当前是 8192)。最小值是取决于系统设置的。
COLUMNS
当打印选择列表时,select 命令使用该值来确定终端的宽度。如果开启了 checkwinsize 选项(参见 4.3.2《内建命令 shopt》),则会进行自动设置。或在 shell 交互模式下基于接收到的 SIGWINCH 信号进行自动设置。
COMP_CWORD
该变量值为一个索引下标。其指示的是“${COMP_WORDS}”数组变量中包含当前游标位置的单词的下标。该变量仅在可编程补全工具(参见 8.6《可编程补全》)调用的 shell 函数中可用。
COMP_LINE
该变量代表当前命令行。该变量仅在可编程补全工具(参见 8.6《可编程补全》)调用的 shell 函数和外部命令中可用。
COMP_POINT
相对于当前命令开始位置的当前游标索引位置。如果当前游标位置是在当前命令的结尾,其值则与“${#COMP_LINE}”相等。该变量仅在可编程补全工具(参见 8.6《可编程补全》)调用的 shell 函数和外部命令中可用。
COMP_TYPE
该变量设置为一个整数值。其对应到在键入补全尝试时所调用的补全函数:“TAB”用于正常补全;“?”用于在连续 tab 键后列出补全选项;“!”用于在单词部分补全时列出替换选项;“@”用于在单词非未修改时列出补全;“%”用于菜单补全。该变量仅在可编程补全工具(参见 8.6《可编程补全》)调用的 shell 函数和外部命令中可用。
COMP_KEY
该变量用于存储调用当前补全函数的键(或键序列的最终键)。
COMP_WORDBREAKS
该变量用于存储一个字符集。当执行单词补全时,Readline 库视其中的字符为单词分隔符。如果释放了 COMP_WORDBREAKS,其会失去特殊属性,即使后继对其重新设置。
COMP_WORDS
该变量是一个数组变量。其元素由当前命令行里的所有单词组成。使用 COMP_WORDBREAKS 里的分隔符将整行中的单词进行分割,就像 Readline 分割一样。该变量仅在可编程补全工具(参见 8.6《可编程补全》)调用的 shell 函数中可用。
COMPREPLY
该变量是一个数组变量。其元素是 Bash 读取的由可编程补全工具调用的 shell 函数所产生的可行补全。每一个数组元素包含一个可行补全。
COPROC
该变量是一个数组变量。其创建的目的是为了保存未命名的协同处理(参见 3.2.6《协同处理》)的输出或输入文件描述符。
DIRSTACK
该变量为一个包含目录堆栈的当前内容的数组变量。这些出现在堆栈中的目录可运行内建命令 dirs 将其按顺序显示出来。可对数组成员进行赋值操作来改变已存在堆栈中的目录,但添加和删除操作必须使用内建命令 pushd 和 popd 进行。对该变量进行赋值不会改变当前目录。如果释放了 DIRSTACK,其会失去特殊属性,即使后继对其重新设置。
EMACS
如果 Bash 启动时在环境中找到该变量,并且其值为“t”,则假定 shell 运行在“Emacs shell 缓冲”中并关闭行编辑。
ENV
当交互式 shell 运行于 POSIX 模式时,该变量的扩展和执行类似于变量 BASH_ENV(参见 6.2《Bash 启动文件》)。
EPOCHREALTIME
每次引用该变量时,其扩展为自 Unix Epoch 以来的秒数。其时间粒度为浮点型微秒(可参见 C 语言库文档中 Epoch 定义的函数 time)。对于该变量的赋值是被忽略的。如果释放了该变量,其会失去其特殊属性,即使后继对其重新赋值。
EPOCHSECONDS
每次引用该变量时,其扩展为自 Unix Epoch 以来的秒数(可参见 C 语言库文档中 Epoch 定义的函数 time)。对于该变量的赋值是被忽略的。如果释放了该变量,其会失去其特殊属性,即使后继对其重新赋值。
EUID
当前用户的数值型有效用户 ID。该变量为只读变量。
EXECIGNORE
该变量存储的是以冒号作为分隔符的 shell 匹配样式列表(匹配样式可参见 3.5.8.1《样式匹配》)。其定义的是在使用 PATH 变量进行命令搜索时要忽略的文件名列表。匹配到这些样式之一的完整路径文件,不会被认为是一个可通过 PATH 搜索的,用于补全操作和执行的可执行文件。但其不会影响到“[”、“test”和“[[”命令的操作行为。在命令哈希表中存储的完整命令路径名不会受该变量影响。使用该变量来忽略带有可执行位设置的但不可执行的共享库文件。该样式匹配遵循 shell 选项“extglob”的设置。
FCEDIT
内建命令 fc 的“-e”选项的默认编辑器。
FIGNORE
执行文件名补全操作时,用于忽略的文件名后缀列表。该列表使用冒号作为分隔符。文件名后缀匹配到该列表中的一个条目时,会将该文件从匹配到的文件名中排除。一个简单例子是“.o:~”。
FUNCNAME
该变量是一个数组变量。其包含的是在执行调用堆栈中所有当前的 shell 函数的函数名。下标为 0 的元素是当前执行的 shell 函数名。堆栈最底层元素(即下标最大的元素)是“main”。该变量只有当执行一个 shell 函数时才会存在。对该变量的赋值不会产生任何效果。如果释放了该变量,其会失去其特殊属性,即使后继对其重新赋值。
该变量可和变量 BASH_LINENO 和 BASH_SOURCE 一起使用。在该变量中的每一个元素,在 BASH_LINENO 和 BASH_SOURCE 都有对应的元素,用来描述调用堆栈。例如,可从文件“${BASH_SOURCE[$i+1]}”中的第“${BASH_LINENO[$i]}”行调用函数“${FUNCNAME[$i]}”。内建命令 caller 可使用这些信息来显示当前调用堆栈。
FUNCNEST
如果对该变量设置了一个大于 0 的数值,则是定义了一个最大函数嵌套层数。函数调用的嵌套层数如果大于该数值,则会引发当前命令中断。
GLOBIGNORE
该变量存储一个以冒号作为分隔符的样式列表。其定义的是一组文件名的集合。出现在该集合中的文件名在进行文件扩展时是会被忽略的。也就是说,如果由文件名扩展匹配到的文件名也同时匹配到该变量中的样式时,其会从匹配列表中移除。该样式匹配遵循 shell 选项“extglob”的设置。
GROUPS
该变量为一个数组变量。其包含的是当前用户作为成员的组列表。对该变量进行赋值不会产生任何效果。如果释放了该变量,其会失去它的特殊属性,即使后继对其重新设置。
histchars
最大为 3 个字符。用于控制历史扩展、快速替换和标记化(参见 9.3《历史交互》)。第一个字符是历史扩展字符。该字符表示一个历史扩展的开始,通常为“!”。第二个字符,当其出现在一行的第一个字符位置时,代表快速替换,通常为“^”。第三个字符是可选的。当其出现在一个单词的第一个字符位置时,其表示该行剩余部分为注释,通常是“#”。历史注释字符会使历史替换跳过该符号后面的所有单词。其不会使 shell 解释器视该行剩余部分为注释。
HISTCMD
基于当前命令的历史命令数量,或历史命令列表索引。对该变量的赋值是会被忽略的。如果释放了该变量,其会失去它的特殊属性,即使后继对其进行重新设置。
HISTCONTROL
该变量存储一个以冒号作为分隔符的列表。列表是用于控制如何将命令存储于历史列表中。如果列表中包含“ignorespace”,则由空格开始的行输入不会存储到历史列表中去。“ignoredups”值会使在前面历史列表中出现过的行不会再次存储到列表中。“ignoreboth”值代表“ignorespace”和“ignoredups”两个值同时生效。“erasedups”值会使与当前行相同的历史命令被移除,之后再将当前行进行保存。不在上述所列的值都会被忽略。如果该变量被释放,或没有包含一个有效的值时,所有从 shell 解析器读取的行都会被保存到历史列表中去,并遵从“HISTIGNORE”。多行的复合命令的第二行和其后继行不会对其进行该项测试,并且不管 HISTCONTROL 的值是什么,都会将它们添加到历史列表中去。
HISTFILE
保存命令历史的文件名。默认值为“~/.bash_history”。
HISTFILESIZE
在历史文件中所能保存的最大行数。当给该变量分配一个值的时候,历史文件会按该值进行裁剪,以删除多余的过老的行数来满足该值。当 shell 退出时,对该文件进行写入之后,也会按该值大小对其进行裁剪。如果该值为 0,则历史文件裁剪到 0 大小。非数值型值和小于 0 的数值都会禁用裁剪。Shell 会在读取启文件之后给 HISTSIZE 设置默认值。
HISTIGNORE
该变量存储一个以冒号作为分隔符的样式列表。其用于决定哪些命令行可以存储到历史列表中。每一个样式都是从一行的开头进行匹配,并且必须匹配完整一行(追加一个非隐式“*”)。在由 HISTCONTROL 指定的检查应用之后,会使用每一个样式对该行进行样式匹配。除了普通的 shell 样式匹配字符之外,还有可使用“&”来匹配之前的历史行。“&”可以使用反斜线进行转义;在试图匹配前,会移除这个反斜线。不会对多行复合命令的第二行和之后的行进行检查,并且会无视 HISTIGONRE 的值,将它们添加到历史列表中。该样式匹配遵循 shell 选项“extglob”的设置。
HISTIGNORE 可实现 HISTCONTROL 的功能。样式“&”等同于“ignoredups”,并且样式“[ ]*”等同于“ignorespace”。使用冒号组合这两个样式,可提供“ignoreboth”功能。
HISTSIZE
该变量存储的是可在历史列表中记住的最大命令行数。如果该值为 0,所有命令将不会保存到历史列表中。小于 0 的数值会使每一条命令都会保存到历史列表中(即无限制)。shell 会在任意启动文件读取后设置该默认值为 500。
HISTTIMEFORMAT
如果设置了该变量并且其值不为空,其值是用于在内建命令 history 显示历史命令时所关联的时间截的 srtftime 的时间格式字符串。如果设置了该变量,时间截将写入到历史文件中以便跨 shell 会话时使用。其使用历史注释字符来将时间截与其它历史记录区分。
HOSTFILE
该变量包含的是一个与“/etc/hosts”格式相同的文件名。当 shell 需要对主机名进行补全操作时,读取该文件。在 shell 运行期间,可行主机名补全列表可能会被改变;在其值改变之后的下一次尝试主机名补全操作时,Bash 会将新文件的内容添加到现有列表中。如果设置了 HOSTFILE,但没有值,或其设置的是一个不可读的文件名,Bash 会试图读取“/etc/hosts”的内容来获取可行的主机名补全。当释放了 HOSTFILE,则清空主机名列表。
HOSTNAME
当前主机的名称。
HOSTTYPE
一个字符串,用于描述 Bash 运行的机器类型。
IGNOREEOF
控制在接收到 EOF 字符时作为垫底输入的 shell 动作。如果设置了该变量,其值表示的是,在 shell 将要退出之前,在一行输入中作为第一个读取的连续的 EOF 字符个数。如果该变量存在,但不是一个数值,或没有值的话,则设置默认值为 10。如果该变量不存在,则 EOF 代表 shell 的输入结束。该变量只有在交互式 shell 中有效。
INPUTRC
Readline 初始化文件名,可覆盖默认的“~/.inputrc”。
INSIDE_EMACS
如果 Bash 在 shell 启动时在环境中找到该变量,则假设 shell 运行在 Emacs shell 缓冲中并且可根据 TERM 的值关闭行编辑。
LANG
在没有以“LC_”开头的变量特别指定任意区域语言类别时,用于确定该类别。
LC_ALL
该变量的值会覆盖变量 LANG 的值和其它以“LC_”开头的变量所指定的区域语言类别。
LC_COLLATE
当对文件名扩展结果进行排序时,该变量用于确定校对顺序。并确定在文件名扩展和样式匹配中的范围表达式、等同类及校对顺序的行为。
LC_CTYPE
该变量用于确定在文件名扩展和样式匹配中对字符的翻译和字符类的行为。
LC_MESSAGES
该变量用于确定在转换前面带有“$”符号的双引号字符串时的区域语言。(参见 3.1.2.5《区域转换》)
LC_NUMERIC
该变量用于确定用于数字格式的区域语言类别。
LC_TIME
该变量用于确定用于日期和时间格式的区域语言类别。
LINENO
该变量用于存储当前执行的脚本或 shell 函数的行号。如果释放了该变量,其会失去它的特殊属性,即使后继对其进行重新设置。
LINES
select 命令使用该变量用于确定在打印选择列表时列的长度。如果“checkwinsize”选项(参见 4.3.2《内建命令 shopt》)开启,或在 shell 交互模式下接收到 SIGWINCH 信号,则自动设置该变量。
MACHTYPE
该变量为一个字符串,用于完整描述 Bash 运行的系统类型。其描述格式是 GNU 标准格式“cpu-company-system”。
MAILCHECK
shell 从变量 MAILPATH 和 MAIL 中指定的邮件文件中检查邮件的频率(单位为秒)。默认为 60 秒。当到达检查时间点时,shell 在显示主要提示前先进行邮件检查。如果释放了该变量,或将其值设置为一个小于 0 的值时,shell 将关闭邮件检查。
MAPFILE
该变量为一个数组变量。当内建命令 mapfile 不带有变量名运行时,其创建该变量并将读入的文本保存于其中。
OLDPWD
由内建命令 cd 设置的上一个工作目录。
OPTERR
如果设置该变量为 1,Bash 会显示由内建命令“getopts”产生的错误信息。
OSTYPE
该变量存储的是 Bash 运行在哪个操作系统之上的字符串。
PIPESTATUS
该变量为一个数组变量。其存储的是最近执行的前台管道命令(也有可能是简单命令)进程所产生的退出状态值列表。
POSIXLY_CORRECT
如果当 Bash 启动时该变量存在于环境中,则在读取启动文件之前 shell 进入 POSIX 模式(参见 6.11《Bash POSIX 模式》),就像使用了调用选项“—posix”一样。如果在 shell 运行期间设置该变量,Bash 则开启 POSIX 模式,就像执行了“set -o posix”命令一样。当 shell 进入 POSIX 模式,如果该变量未被设置,则会设置该变量。
PPID
该变量存储的是 shell 父进程的进程 ID。该变量是只读的。
PROMPT_COMMAND
如果设置了该变量,并且是一个数组,则每一个设置的元素值都翻译为在打印主提示符($PS1)之前执行的命令。如果该变量不是设置为一个数组变量,其值则作为命令执行来代替数组元素值的执行。
PROMPT_DIRTRIM
如果设置该变量的值大于 0,当提示符扩展转义字符“\w”或“\W”时(参见 6.9《控制提示符》),其数值代表保留的拖尾目录组件的数量。移除的字符由省略号代替。
PS0
该参数的值扩展就像 PS1 一样。并且在交互式 shell 读取一个命令之后和该命令执行之前显示该扩展结果。
PS3
该变量值用于 select 命令的提示符。如果该变量没有设置,则 select 命令提示符为“#?”。
PS4
该参数的值扩展就像 PS1 一样。当使用了 set 命令的“-x”选项后,该扩展值会在命令回显前面作为提示符打印出来。扩展值的第一个字符会按需要重复多次,来指示出多少次的间接级别。默认值为“+”。
PWD
由内建命令 cd 设置的当前工作目录。
RANDOM
在每一次引用该参数时,其扩展为一个介于 0 到 32767 之间的随机整数。对该变量赋值会产生一个随机数生成器。如果释放该变量,其会失去它的特殊属性,即使后继对其进行重新设置。
READLINE_LINE
该变量值为 Readline 行缓冲的内容,用于“bind -x”(参见 4.2《Bash 内建命令》)。
READLINE_MARK
该变量值是在 Readline 行缓冲中的标记(保存的插入点)位置,用于“bind -x”(参见 4.2《Bash 内建命令》)。在插入点与标记之间的字符通常被称为区域(regoin)。
READLINE_POINT
该变量值是在 Readline 行缓冲中插入点的位置,用于“bind -x”(参见 4.2《Bash 内建命令》)。
REPLY
内建命令 read 的默认变量。
SECONDS
该变量扩展为自 shell 启动后的秒数。对该变量的赋值会重置计数,并且其扩展值变为所赋值加上自赋值时起的秒数。在 shell 调用时的秒数和当前时间总是由请求系统时钟确定的。如果释放该变量,其会失去它的特殊属性,即使后继对其进行重新设置。
SHELL
扩展为 shell 完整路径名的环境变量。如果在 shell 启动时没有设置该变量,Bash 则使用当前用户登录 shell 的完整路径名设置该变量。
SHELLOPTS
该变量存储的是一个以冒号作为分隔符的已开启的 shell 选项列表。在列表中的每一个单词都是内建命令 set(参见 4.3.1《内建命令 set》)的“-o”选项的可用参数。在该变量中出现的选项就是使用“set -o”命令显示为“on”的选项。如果当 Bash 启动时该变量存在于环境中,则在列表中的每一个 shell 选项会在读取任意启动文件之前开启。该变量为只读变量。
SHLVL
在每一次启动一个 Bash 的新实例时其值会自加 1。该变量的意图在于指示嵌套的 Bash 层数。
SRANDOM
该变量在每一次引用时扩展为一个 32 位伪随机数。在支持“/dev/urandom”或“arc4random”的系统上,随机数生成器是非线性的。所以每一次其返回的数值都和前面的数值没有联系。其随机数生成器不能被生成,所以对该变量进行赋值是没有任何反应的。如果释放了该变量,其会失去它的特殊属性,即使后继对其进行重新设置。
TIMEFORMAT
该变量值是一个格式字符串。其格式指定的是如何显示以“time”保留字为前缀的管道的时间信息。转义序列由“%”字符开始,其可扩展为一个时间值或其它信息。下面列出的是转义序列以及其含义;大括号代表的是可选部分。
| 转义序列 | 含义 |
|---|---|
| %% | 一个百分号符号。 |
| %[p][l]R | 以秒为单位的逝去时间。 |
| %[p][l]U | 用户模式下的 CPU 开销秒数。 |
| %[p][l]S | 系统模式下的 CPU 开销秒数。 |
| %P | 使用“(%U + %S) / %R”计算出的 CPU 占用率。 |
可选项“p”是用于指定精度的数字位,其代表在小数点后的小数位数。0 值会输出为非小数。至多指定小数点后 3 位;大于 3 的“p”值会被改为 3。如果没有指定“p”的值,则使用 3。
可选项“l”指定一个包括分钟的更长的格式“MMmSS.FFs”。“p”的值决定了是否包括小数部分。
如果没有设置该变量,Bash 就像使用了格式“$‘\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS’”一样。
如果该变量值为空,则不会显示时间信息。当格式字符串显示时,在其末尾会添加一个换行。
TMOUT
如果给该变量设置了一个大于 0 的值,该值就作为内建命令 read 的默认超时时间。如果 select 命令在 TMOUT 秒数之后没有接收到来自终端的输入,则该命令终止。
在 shell 交互模式下,该值被解释为在发出主提示符之后等待行输入的秒数。如果 Bash 在等待秒数过后没有接收到一个完整的输入行,则会退出。
TMPDIR
如果设置了该变量,Bash 使用其值作为目录名,其中用于存储 shell 使用的临时文件。
UID
该变量代表当前用户的数值型真实用户 ID。该变量为只读变量。