Shell Variables 变量

shell 定义了下列变量:

BASH

扩展为用来启动当前 bash 实例的文件全名。

BASH_VERSINFO

一个只读数组变量,成员保存着当前 bash 实例的版本信息。赋予数组元素的值是如下这些:

BASH_VERSINFO[0]

主版本号 (release).

BASH_VERSINFO[1]

次版本号 (version).

BASH_VERSINFO[2]

补丁版本

BASH_VERSINFO[3]

编译信息

BASH_VERSINFO[4]

发布时的状态 (例如, beta1).

BASH_VERSINFO[5]

MACHTYPE 平台类型

BASH_VERSION

扩展为一个字符串,描述了这个 bash. 实例的版本。

COMP_CWORD

${COMP_WORDS} 的索引,指向当前光标位置所在的词。 这个变量只有在被可编程补全功能 (参见下面的 Programmable Completion 章节) 调用的 shell 函数中才可用。

COMP_LINE

当前命令行。这个变量只有在被命令补全功能调用的 shell 函数和外部命令中才可用。

COMP_POINT

相对于当前命令起始处的当前光标位置。如果当前光标位置是当前命令的末端, 它的值就和 ${#COMP_LINE} 相等。 这个变量只有在被命令补全功能调用的 shell 函数和外部命令中才可用。

COMP_WORDS

一个数组变量 (参见下面的 Arrays(数组)一节),由当前命令行的各个单词构成。 这个变量只有在被命令补全功能调用的 shell 函数中才可用。

DIRSTACK

一个数组变量,包含当前目录栈的内容。栈中的目录排列的顺序就是用内建命令 dirs 显示时的顺序。对这个数组变量的成员赋值可以用来修改栈中已有的目录,但是要添加和删除目录就必须使用 内建命令 pushdpopd。 对它赋值不会改变当前目录。如果取消了 DIRSTACK 的定义,它就失去了它的特殊意义,即使后来重新定义它。

EUID

扩展为当前用户的有效用户 ID。它在 shell 启动时设置。它是只读的。

FUNCNAME

当前执行的 shell 函数名。这个变量只有在执行一个 shell 函数时存在。向 FUNCNAME 赋值没有效果并且返回一个错误。如果取消了 FUNCNAME 的定义,它就失去了特殊的意义,即使后来重新定义它。

GROUPS

一个数组变量,包含当前用户所属的组的列表。向 GROUPS 赋值没有效果并且返回一个错误。如果取消了 GROUPS 的定义,它就失去了特殊的意义,即使后来重新定义它。

HISTCMD

当前命令的历史编号,或者历史列表中的索引。如果取消了 HISTCMD 的定义,它就失去了特殊的意义,即使后来重新定义它。

HOSTNAME

自动设置为当前的主机名。

HOSTTYPE

自动设置为一个字符串,唯一地标识着正在运行 bash 的机器类型。默认值是系统相关的。

LINENO

每次引用这个参数时,shell 将它替换为一个指示在脚本或函数中当前行号的十进制数字(从 1 开始)。 如果不是在脚本或函数中,替换得到的值不一定有意义。如果取消了 LINENO 的定义,它就失去了特殊的意义,即使后来重新定义它。

MACHTYPE

自动设置为一个字符串,完整的描述了正在运行 bash 的系统类型,格式是标准的 GNU cpu-company-system 格式。默认值是系统相关的。

OLDPWD

上一次命令 cd 设置的工作目录。

OPTARG

内建命令 getopts 处理的最后一个选项参数值 (参见下面的 shell 内建命令(SHELL BUILTIN COMMANDS) 章节)。

OPTIND

内建命令 getopts 将处理的下一个参数的索引 (参见下面的 shell 内建命令(SHELL BUILTIN COMMANDS) 章节)。

OSTYPE

自动设置的一个字符串,描述了正在运行 bash 的操作系统。默认值是系统相关的。

PIPESTATUS

一个数组变量 (参见下面的 Arrays 数组 章节),包含最近执行的前台管道中的进程(可能只包含一个命令)的退出状态。

PPID

shell 的父进程的进程号。这个变量是只读的。

PWD

cd 命令设置的当前工作目录。

RANDOM

每次引用这个参数时,都会产生一个 0 到 32767 之间的随机整数。可以通过向 RANDOM 赋值来初始化随机数序列。如果取消了 RANDOM 的定义,它就失去了特殊的意义,即使后来重新定义它。

REPLY

变量的值将作为内建命令 read 的输入,如果命令没有参数的话。

SECONDS

每次引用这个参数时,返回 shell 自运行以来的秒数。如果向 SECONDS 赋值,此后对它的引用将返回自赋值时起的秒数加上所赋予的值。如果取消 SECONDS 的定义,它就失去了特殊的意义,即使后来重新定义它。

SHELLOPTS

一个冒号分隔的被允许的 shell 选项列表。列表中每个词都是内置命令 set-o 选项的有效参数。 SHELLOPTS 中出现的选项也是 set -o 显示为 on 的选项。如果 bash 启动时从环境中找到这个变量,那么在读取任何配置文件之前,列表中的每个选项都将被设置。这个变量是只读的。

SHLVL

每次启动一个 bash 的实例时都会增加。

UID

扩展为当前用户的 ID,在启动时初始化。这个变量是只读的。

下列变量被 shell 使用。有时 bash 会为变量赋默认值;这些情况在下面会标出。

BASH_ENV

如果 bash 在执行一个 shell 脚本时设定了这个变量,它的值将被解释为一个文件名, 包含着初始化 shell 用到的命令,就像 ~/.bashrc 中一样。 BASH_ENV 的值在被解释为一个文件名之前要经过参数扩展,命令替换和算术扩展。不会使用 PATH 来查找结果文件名。

CDPATH

命令 cd 的搜索路径。这是一个冒号分隔的目录列表,shell 从中查找 cd 命令的目标目录。可以是这样: ".:~:/usr".

COLUMNS

用在内建命令 select 当中,用来判断输出选择列表时的终端宽度。 自动根据 SIGWINCH 信号来设置。

COMPREPLY

一个数组变量,bash 从中读取可能的命令补全。 它是由命令补全功能调用的 shell 函数产生的。

FCEDIT

内建命令 fc 默认的编辑器。

FIGNORE

一个冒号分隔的后缀名列表,在进行文件名补全时被忽略 (参见下面的 READLINE 章节)。一个后缀满足其中之一的文件名被排除在匹配的文件名之外。可以是这样: ".o:~".

GLOBIGNORE

一个冒号分隔的模式列表,定义了路径名扩展时要忽略的文件名集合。 如果一个文件名与路径扩展模式匹配,同时匹配 GLOBIGNORE 中的一个模式时,它被从匹配列表中删除。

HISTCONTROL

如果设置为 ignorespace, 以 space 开头的行将不会插入到历史列表中。如果设置为 ignoredups, 匹配上一次历史记录的行将不会插入。设置为 ignoreboth 会结合这两种选项。如果没有定义,或者设置为其他值,所有解释器读取的行都将存入历史列表, 但还要经过 HISTIGNORE 处理。这个变量的作用可以被 HISTIGNORE 替代。多行的组合命令的第二和其余行都不会被检测,不管 HISTCONTROL 是什么,都会加入到历史中。

HISTFILE

保存命令历史的文件名 (参见下面的 HISTORY 历史 章节)。默认值是 ~/.bash_history。如果取消定义,在交互式 shell 退出时 命令历史将不会保存。

HISTFILESIZE

历史文件中包含的最大行数。当为这个变量赋值时,如果需要的话,历史文件将被截断 来容纳不超过这个值的行。默认值是 500。历史文件在交互式 shell 退出时 也会被截断到这个值。

HISTIGNORE

一个冒号分隔的模式列表,用来判断那个命令行应当保存在历史列表中。每个模式 都定位于行首,必须匹配整行 (没有假定添加 *****')。在 **HISTCONTROL** 指定的测试结束后,这里的每个模式都要被测试。除了平常的 shell 模式匹配字符,&' 匹配上一个历史行。`&' 可以使用反斜杠来转义;反斜杠在 尝试匹配之前将被删除。多行的组合命令的第二行以及后续行都不会被测试,不管 HISTIGNORE 是什么,都将加入到历史中。

HISTSIZE

命令历史中保存的历史数量 (参见下面的 HISTORY 历史 章节)。默认值是 500。

HOME

当前用户的个人目录;内建命令 cd 的默认参数。在执行波浪线扩展时也用到这个变量。

HOSTFILE

包含一个格式和 /etc/hosts 相同的文件名,当 shell 需要补全主机名时要读取它。shell 运行过程中 可以改变可能的主机名补全列表;改变之后下一次需要主机名补全时 bash 会将新文件的内容添加到旧列表中。如果定义了 HOSTFILE 但是没有赋值,bash 将尝试读取 /etc/hosts 文件来获得可能的主机名补全列表。当取消 HOSTFILE 的定义时,主机名列表将清空。

IFS

内部字段分隔符 Internal Field Separator 用来在扩展之后进行分词,使用内部命令 read 将行划分成词。默认值是 ``<space><tab><newline>''。

IGNOREEOF

控制交互式 shell 接受到唯一一个 EOF 字符时的行为。如果有定义,值是需要在一行的开始连续输入 EOF 字符,直到可以使 bash 退出的字符个数。如果这个变量存在,但是值不是一个数字或者没有赋值,默认值是 10。 如果变量没有定义, EOF 标志着输入的结束。

INPUTRC

readline 的启动配置文件,而不是默认的 ~/.inputrc (参见下面的 READLINE 章节)。

LANG

用来决定没有特地用 LC_ 变量指定的语言环境项。

LC_ALL

这个变量超越了 LANG 和所有其他指定语言环境项的 LC_ 变量。

LC_COLLATE

这个变量决定了为路径扩展的结果排序时的字母顺序,决定了范围表达式的行为, 等价类,和路径扩展中的归并顺序以及模式匹配。

LC_CTYPE

这个变量决定了字符的解释和路径扩展以及模式匹配中字符类的行为。

LC_MESSAGES

这个变量决定了翻译以 $ 前导的双引号字符串时的语言环境。

LC_NUMERIC

这个变量决定了格式化数字时的语言环境分类。

LINES

内建命令 select 用它来判断输出选择列表时的列宽度。在收到 SIGWINCH 信号时自动设置。

MAIL

如果这个参数设置为一个文件名,并且没有设置环境变量 MAILPATH 的话, bash 将在这个文件中通知用户有邮件到达。

MAILCHECK

指定 bash 检查邮件的频率是多少,以秒为单位。默认值是 60 秒。需要检查邮件的时候,shell 在显示提示符之前将进行检查。 如果取消它的定义,或者设置为并非大于等于零的数值,shell 将禁止邮件检查。

MAILPATH

一个冒号分隔的文件名列表,从中检查邮件。当邮件到达某个特殊文件中时,输出的特定消息可以 通过将文件名与消息以 `?' 分隔来指定。 在消息的文本中,$_ 扩展为当前邮件文件的文件名。例如:

MAILPATH='/var/mail/bfox?"You have mail":~/shell-mail?"$_ has mail!"'

Bash 为这个变量提供默认值,但是它使用的用户邮件文件的位置是系统相关的 (例如,/var/mail/$USER)。

OPTERR

如果设置为 1, bash 显示内建命令 getopts 产生的错误消息 (参见下面的 shell 内建命令(SHELL BUILTIN COMMANDS) 章节)。每次 shell 启动时或者一个 shell 脚本被执行时 OPTERR 被初始化为 1。

PATH

搜索命令的路径。它是一个冒号分割的目录列表,shell 从中搜索命令 (参见下面的 命令执行(COMMAND EXECUTION) 段落)。默认的路径是系统相关的,是由安装 bash 的系统管理员设置的。通常它的值是 ``/usr/gnu/bin:/usr/local/bin:/usr/ucb:/bin:/usr/bin:.''。

POSIXLY_CORRECT

如果 bash 启动环境中有这个变量,它将在读取启动配置文件之前进入 posix mode,就好像提供了 --posix 启动参数一样。如果 shell 运行过程中设置了它,bash 就启用 posix mode,就好像执行了 set -o posix 命令一样。

PROMPT_COMMAND

如果有定义,它的值将作为一个命令,每次显示主提示符之前都会执行。

PS1

这个参数的值被扩展 (参见下面的 PROMPTING 提示符 段落),用作主提示符字符串。默认值是 ``\s-\v$ ''。

PS2

这个参数的值同 PS1 一起被扩展,用作次提示符字符串。默认值是 ``> ''。

PS3

这个参数的值被用作内建命令 select 的提示符 (参见上面的 SHELL GRAMMAR 语法 章节)。

PS4

这个参数的值同 PS1 一起被扩展,在执行跟踪中在 bash 显示每个命令之前显示。需要的话, PS4 的第一个字符会被复制多次,来指示 indirection 的层数。默认值是 ``+ ''。

TIMEFORMAT

在前缀 time 保留字的管道中,这个参数的值用作格式字符串, 指定计时信息如何显示。字符 % 引入的转义序列,被扩展为时间值 或其他信息。转义序列和它们的含义如下所示;括号中是可选的成分。

%%

一个字面上的 %

%[p][l]R

经历的时间,以秒计算。

%[p][l]U

CPU 在用户模式下执行的秒数。

%[p][l]S

CPU 在系统模式下执行的秒数。

%P

CPU 使用率,算法是 (%U + %S) / %R。

可选的 p 是指定精度 (小数点后数字位数) 的数值。 如果是 0 就不输出小数点或小数值。最多指定到小数点后三位; 如果 p 大于 3 就会被改为 3。如果没有指定 p,默认使用 3。

可选的 l 指定了长格式,包含分钟,格式是 MM_m_SS.FF_s。 _p 的值决定了是不是包含小数位。

如果没有设置这个值,bash 假定它的值是 $'\nreal\t%3lR\nuser\t%3lU\nsys %3lS'。 如果它是空值,就不会显示计时信息。显示格式字符串的时候,会加上 一个前导的新行符。

TMOUT

如果设置为大于 0 的值,TMOUT 被当作内建命令 read 的默认超时 等待时间。如果等待终端输入时, TMOUT 秒之后仍然没有输入, select 命令将终止。在交互的 shell 中,它的值被解释为显示了 主提示符之后等待输入的秒数。如果经过这个秒数之后仍然没有输入, Bash 将退出。

auto_resume

这个变量控制了 shell 如何与用户和作业控制交互。如果设置了这个变量, 一个不包含重定向的单个词的简单命令,将作为恢复被中断的作业的指示。 不允许出现模棱两可的情况;如果有多个作业都以这个词起始,将恢复最近运行 的作业。在这种情形下,被中断的作业的 name 是用于启动它的命令行。如果值设置为 exact, 给出的字符串必须精确匹配被中断的作业名;如果设置为 substring, 给出的字符串需要匹配被中断的作业名的子串。值 substring 的功能与作业标识符 %? 功能类似 (参见下面的 JOB CONTROL 作业控制 章节)。如果设置为任何其他值,给出的字符串必须是被中断的作业的前缀; 这样做与作业标识符 % 功能类似。

histchars

两到三个字符,控制着历史扩展和分段 (tokenization,参见下面的 HISTORY EXPANSION 历史扩展 章节)。第一个字符是 history expansion(历史扩展) 字符, 这个字符表明了历史扩展的开始,通常是 **!**'。 第二个字符是 _quick substitution_(快速替换) 字符, 它是重新运行上次输入的命令,但将命令中的字符串替换为另一个的简写, 默认是^'。可选的第三个字符是指示如果作为一个词的开始,那么 一行中剩余字符是注释。通常这个字符是 `#'。历史注释字符使得 对一行中剩余字符在历史替换中被跳过。它不一定使 shell 解释器将 这一行的剩余部分当作注释。