Bash变量

本文深入探讨了Bash Shell中的各种变量,包括它们的作用、如何使用以及特定变量的详细属性。从基本变量到高级功能,如函数调用堆栈、历史记录控制和环境配置,本文提供了全面的指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这些变量由Bash设置或使用,但其他shell通常不会特别对它们进行处理。

Bash使用的一些变量在不同的章节中描述:用于控制作业控制设施的变量(参见作业控制变量)。

BASH
用于执行Bash当前实例的完整路径名。

BASHOPTS
以冒号分隔的已启用shell选项列表。列表中的每个单词都是有效的参数-sshopt内置命令的选项 (请参阅Shopt Builtin)。出现的选项BASHOPTS是报告为’上’by’禁用了javascript”。如果此变量在Bash启动时处于环境中,则在读取任何启动文件之前,将启用列表中的每个shell选项。这个变量是只读的。

BASHPID
扩展到当前Bash进程的进程ID。这与$$某些情况不同,例如不需要重新初始化Bash的子shell。作业BASHPID无效。如果BASHPID 未设置,它将失去其特殊属性,即使它随后被重置。

BASH_ALIASES
一个关联数组变量,其成员对应于由alias内置程序维护的内部别名列表。(参见Bourne Shell Builtins)。添加到此数组的元素将显示在别名列表中; 但是,取消设置数组元素当前不会导致从别名列表中删除别名。如果BASH_ALIASES 未设置,它将失去其特殊属性,即使它随后被重置。

BASH_ARGC
一个数组变量,其值是当前bash执行调用堆栈的每个帧中的参数数。当前子例程的参数数量(使用.或执行的shell函数或脚本source)位于堆栈的顶部。执行子程序时,将传递参数的数量 BASH_ARGC。shell BASH_ARGC仅在扩展调试模式下设置(有关内置extdebug选项 的说明,请参阅Shopt Builtinshopt )。设置extdebug壳开始后执行脚本,或引用这个变量时extdebug没有设置,可能会导致不一致的值。

BASH_ARGV
包含当前bash执行调用堆栈中所有参数的数组变量。最后一个子程序调用的最后一个参数位于堆栈的顶部; 初始调用的第一个参数位于底部。执行子程序时,将提供所提供的参数BASH_ARGV。shell BASH_ARGV仅在扩展调试模式下设置(有关内置extdebug选项 的说明,请参阅Shopt Builtinshopt )。设置extdebug壳开始后执行脚本,或引用这个变量时extdebug没有设置,可能会导致不一致的值。

BASH_ARGV0
引用时,此变量将扩展为shell或shell脚本的名称(与特殊参数0的描述相同$0;请参阅特殊参数)。分配以BASH_ARGV0 使分配的值也被分配给$0。如果BASH_ARGV0 未设置,它将失去其特殊属性,即使它随后被重置。

BASH_CMDS
一个关联数组变量,其成员对应于由内置函数维护的命令的内部哈希表hash(请参阅Bourne Shell Builtins)。添加到此数组的元素显示在哈希表中; 但是,取消设置数组元素当前不会导致从哈希表中删除命令名称。如果BASH_CMDS 未设置,它将失去其特殊属性,即使它随后被重置。

BASH_COMMAND
当前正在执行或即将执行的命令,除非shell正在执行作为陷阱结果的命令,在这种情况下,它是在陷阱时执行的命令。

BASH_COMPAT
该值用于设置shell的兼容级别。有关各种兼容性级别及其效果的说明,请参阅Shopt Builtin。该值可以是十进制数(例如,4.2)或对应于期望的兼容性级别的整数(例如,42)。如果BASH_COMPAT未设置或设置为空字符串,则兼容级别将设置为当前版本的默认值。如果BASH_COMPAT将值设置为不是有效兼容级别之一的值,则shell会输出错误消息并将兼容级别设置为当前版本的默认值。有效的兼容级别对应于上述shopt内置接受的兼容性选项(例如, compat42表示4.2和42是有效值)。当前版本也是有效值。

BASH_ENV
如果在调用Bash以执行shell脚本时设置此变量,则会扩展其值并将其用作在执行脚本之前要读取的启动文件的名称。请参阅Bash启动文件。

BASH_EXECUTION_STRING
命令参数 -C 调用选项。

BASH_LINENO
一个数组变量,其成员是源文件中的行号,其中调用了FUNCNAME的每个相应成员。 KaTeX parse error: Expected '}', got 'EOF' at end of input: {BASH_LINENO[i]}是源文件(KaTeX parse error: Expected '}', got 'EOF' at end of input: {BASH_SOURCE[i+1]})中 KaTeX parse error: Expected '}', got 'EOF' at end of input: {FUNCNAME[i]}调用的行号(或者KaTeX parse error: Expected '}', got 'EOF' at end of input: {BASH_LINENO[i-1]}在另一个shell函数中引用的行号)。使用LINENO以获取当前的行号。

BASH_LOADABLES_PATH
以冒号分隔的目录列表,其中shell查找由enable命令指定的动态可加载内置函数 。

BASH_REMATCH
一个数组变量,其成员由’分配=〜’ [[条件命令的二元运算符(参见条件构造)。索引为0的元素是与整个正则表达式匹配的字符串部分。索引为n的元素是与第n个带括号的子表达式匹配的字符串部分。该变量是只读的。

BASH_SOURCE
一个数组变量,其成员是源文件名,其中FUNCNAME定义了数组变量中相应的shell函数名。shell函数KaTeX parse error: Expected '}', got 'EOF' at end of input: {FUNCNAME[i]}在文件中定义 KaTeX parse error: Expected '}', got 'EOF' at end of input: {BASH_SOURCE[i]}并从中调用KaTeX parse error: Expected '}', got 'EOF' at end of input: {BASH_SOURCE[i+1]}

BASH_SUBSHELL
当shell在该环境中开始执行时,在每个子shell或子shell环境中增加1。初始值为0。

BASH_VERSINFO
一个只读数组变量(参见Arrays),其成员包含此Bash实例的版本信息。分配给数组成员的值如下:

BASH_VERSINFO[0]
主要版本号(发布)。

BASH_VERSINFO[1]
次要版本号(版本)。

BASH_VERSINFO[2]
补丁级别。

BASH_VERSINFO[3]
构建版本。

BASH_VERSINFO[4]
发布状态(例如,beta1)。

BASH_VERSINFO[5]
的价值MACHTYPE。

BASH_VERSION
Bash当前实例的版本号。

BASH_XTRACEFD
如果设置为对应于有效文件描述符的整数,Bash将写入’'时生成的跟踪输出设置-x’启用该文件描述符。这允许将跟踪输出与诊断和错误消息分开。BASH_XTRACEFD未设置或分配新值时,文件描述符将关闭。取消设置BASH_XTRACEFD或为其分配空字符串会导致跟踪输出发送到标准错误。请注意,设置BASH_XTRACEFD为2(标准错误文件描述符)然后取消设置将导致标准错误被关闭。

CHILD_MAX
设置要记住的shell的已退出子状态值的数量。Bash不允许将此值降低到POSIX指令的最小值以下,并且有一个最大值(当前为8192),这可能不会超过。最小值取决于系统。

COLUMNS
select打印选择列表时,命令用于确定终端宽度。如果checkwinsize选项已启用(请参阅Shopt Builtin),或在收到a时在交互式shell中 自动设置SIGWINCH。

COMP_CWORD
${COMP_WORDS}包含当前光标位置的单词的索引。此变量仅在可编程完成工具调用的shell函数中可用(请参阅可编程完成)。

COMP_LINE
当前的命令行。此变量仅在可编程完成工具调用的shell函数和外部命令中可用(请参阅可编程完成)。

COMP_POINT
当前光标位置相对于当前命令开头的索引。如果当前光标位置在当前命令的末尾,则此变量的值等于${#COMP_LINE}。此变量仅在可编程完成工具调用的shell函数和外部命令中可用(请参阅可编程完成)。

COMP_TYPE
设置为一个整数值,对应于导致调用完成函数的尝试完成类型: TAB,正常完成,’?’,用于列出连续标签后的完成情况,’!’,用于列出部分单词完成的替代方案,’@’,如果单词未被修改,则列出完成,或’%’,菜单完成。此变量仅在可编程完成工具调用的shell函数和外部命令中可用(请参阅可编程完成)。

COMP_KEY
用于调用当前完成函数的键(或键序列的最终键)。

COMP_WORDBREAKS
执行单词完成时,Readline库将其视为单词分隔符的字符集。如果COMP_WORDBREAKS未设置,它将失去其特殊属性,即使它随后被重置。

COMP_WORDS
一个数组变量,由当前命令行中的各个单词组成。如上所述,当Readline将其拆分时,该行被分成单词 COMP_WORDBREAKS。此变量仅在可编程完成工具调用的shell函数中可用(请参阅可编程完成)。

COMPREPLY
一个数组变量,Bash从中读取由可编程完成工具调用的shell函数生成的可能的完成(参见可编程完成)。每个数组元素包含一个可能的完成。

COPROC
创建一个数组变量,用于保存文件描述符以输出和输入未命名的协同进程(请参阅Coprocesses)。

DIRSTACK
包含目录堆栈当前内容的数组变量。目录按dirs内置显示的顺序显示在堆栈中 。分配给此数组变量的成员可用于修改堆栈中已有的目录,但 必须使用pushd和popdbuiltins来添加和删除目录。对此变量的赋值不会更改当前目录。如果DIRSTACK未设置,它将失去其特殊属性,即使它随后被重置。

EMACS
当shell以值’‘开头时,Bash在环境中找到此变量Ť’,它假定shell在Emacs shell缓冲区中运行并禁用行编辑。

ENV
类似于BASH_ENV; 在POSIX模式下调用shell时使用 (请参阅Bash POSIX模式)。

EPOCHREALTIME
每次引用此参数时,它都会扩展为自Unix Epoch以来的秒数,作为具有微秒粒度的浮点值(有关Epoch定义的C库函数时间的文档,请参阅文档)。分配将EPOCHREALTIME被忽略。如果EPOCHREALTIME未设置,它将失去其特殊属性,即使它随后被重置。

EPOCHSECONDS
每次引用此参数时,它都会扩展到自Unix Epoch以来的秒数(有关Epoch定义的C库函数时间文档,请参阅文档 )。分配将EPOCHSECONDS被忽略。如果EPOCHSECONDS未设置,它将失去其特殊属性,即使它随后被重置。

EUID
当前用户的数字有效用户ID。这个变量是只读的。

EXECIGNORE
以冒号分隔的shell模式列表(请参阅模式匹配),用于定义要使用命令搜索忽略的文件名列表 PATH。完整路径名与其中一个模式匹配的文件不会被视为可执行文件,以便通过PATH查找完成和执行命令。这不会影响的行为[,test和[[ 命令。命令哈希表中的完整路径名不受影响EXECIGNORE。使用此变量可忽略具有可执行位设置但不是可执行文件的共享库文件。模式匹配遵循extglobshell选项的设置。

FCEDIT
编辑器用作默认值 -efc 内置命令的选项。

FIGNORE
执行文件名完成时要忽略的以冒号分隔的后缀列表。后缀与其中一个条目 FIGNORE 匹配的文件名将从匹配的文件名列表中排除。样本值是’的.o:〜“

FUNCNAME
一个数组变量,包含当前在执行调用堆栈中的所有shell函数的名称。索引为0的元素是当前正在执行的shell函数的名称。最底层的元素(索引最高的元素)是"main"。此变量仅在执行shell函数时存在。作业FUNCNAME无效。如果FUNCNAME未设置,它将失去其特殊属性,即使它随后被重置。

此变量可以与BASH_LINENO和一起使用BASH_SOURCE。每个元素FUNCNAME都有相应的元素 BASH_LINENO和BASH_SOURCE描述调用堆栈。例如,KaTeX parse error: Expected '}', got 'EOF' at end of input: {FUNCNAME[i]}从KaTeX parse error: Expected '}', got 'EOF' at end of input: {BASH_SOURCE[i+1]}行号处的文件调用 KaTeX parse error: Expected '}', got 'EOF' at end of input: {BASH_LINENO[i]}。在caller内建显示使用该信息当前调用堆栈。

FUNCNEST
如果设置为大于0的数值,则定义最大函数嵌套级别。超过此嵌套级别的函数调用将导致当前命令中止。

GLOBIGNORE
以冒号分隔的模式列表,用于定义文件名扩展要忽略的文件名集。如果文件名扩展模式匹配的文件名也与其中一个模式匹配GLOBIGNORE,则会从匹配列表中删除它。模式匹配遵循extglobshell选项的设置。

GROUPS
一个数组变量,包含当前用户所属的组列表。作业GROUPS无效。如果GROUPS未设置,它将失去其特殊属性,即使它随后被重置。

histchars
最多三个字符,用于控制历史记录扩展,快速替换和标记化(请参阅历史记录交互)。第一个字符是 历史扩展字符,即表示历史扩展开始的字符,通常是’!”。第二个字符是当被视为一行中的第一个字符时表示“快速替换”的字符,通常是’^”。可选的第三个字符是字符,表示当作为单词的第一个字符找到时,该行的其余部分是注释,通常是’#”。历史注释字符导致跳过该行上剩余单词的历史替换。它不一定会导致shell解析器将该行的其余部分视为注释。

HISTCMD
当前命令的历史记录编号或历史记录列表中的索引。如果HISTCMD未设置,它将失去其特殊属性,即使它随后被重置。

HISTCONTROL
以冒号分隔的值列表,用于控制命令在历史列表中的保存方式。如果值列表包括’ignorespace’,以空格字符开头的行不会保存在历史记录列表中。值’ignoredups’导致与先前历史记录条目匹配的行不被保存。值’ignoreboth’是’的简写’ignorespace’和’ignoredups”。值’erasedups’导致在保存该行之前,从历史列表中删除与当前行匹配的所有先前行。忽略上面列表中没有的任何值。如果HISTCONTROL未设置,或者不包含有效值,则shell解析器读取的所有行都将保存在历史记录列表中,具体取决于值HISTIGNORE。不测试多行复合命令的第二行和后续行,并将其添加到历史记录中,而不管其值是多少 HISTCONTROL。

HISTFILE
保存命令历史记录的文件的名称。默认值为〜/ .bash_history的。

HISTFILESIZE
历史文件中包含的最大行数。为此变量分配值时,如有必要,将截断历史文件,以通过删除最旧的条目来包含不超过该行数。在shell退出时写入历史文件后,也会将其截断为此大小。如果值为0,则历史文件将截断为零大小。非数字值和小于零的数值会禁止截断。shell HISTSIZE 在读取任何启动文件后将默认值设置为值。

HISTIGNORE
以冒号分隔的模式列表,用于决定应在历史列表中保存哪些命令行。每个模式都锚定在行的开头,并且必须匹配整行(没有隐含的’*‘附后)。HISTCONTROL 在应用指定的检查后,将针对该行测试每个模式。除了正常的shell模式匹配字符外,’&'匹配以前的历史记录行。“&'可以使用反斜杠进行转义; 在尝试匹配之前删除反斜杠。不测试多行复合命令的第二行和后续行,并将其添加到历史记录中,而不管其值是多少 HISTIGNORE。模式匹配遵循extglobshell选项的设置。

HISTIGNORE包含了…的功能HISTCONTROL。一种模式’&‘与’相同’ ignoredups和’模式’[] *'与…完全相同ignorespace。结合这两种模式,用冒号分隔它们,提供了功能ignoreboth。

HISTSIZE
历史列表中要记住的最大命令数。如果值为0,则命令不会保存在历史记录列表中。数值小于零会导致每个命令保存在历史列表中(没有限制)。在读取任何启动文件后,shell将默认值设置为500。

HISTTIMEFORMAT
如果此变量已设置且不为null,则其值将用作strftime的格式字符串,以打印与history内置显示的每个历史记录条目关联的时间戳。如果设置了此变量,则会将时间戳写入历史记录文件,以便可以跨shell会话保留它们。这使用历史注释字符来区分时间戳与其他历史记录行。

HOSTFILE
包含与其格式相同的文件名 / etc / hosts文件当shell需要完成主机名时应该读取。shell运行时可能会更改可能的主机名完成列表; 下次在更改值后尝试完成主机名时,Bash会将新文件的内容添加到现有列表中。如果HOSTFILE设置但没有值,或者没有命名可读文件,Bash会尝试读取 / etc / hosts文件获取可能的主机名完成列表。何时HOSTFILE取消设置,将清除主机名列表。

HOSTNAME
当前主机的名称。

HOSTTYPE
描述正在运行Bash机器的字符串。

IGNOREEOF
控制shell在接收EOF字符作为唯一输入时的操作。如果设置,则该值表示EOF在shell退出之前可以作为输入行上的第一个字符读取的连续字符数。如果变量存在但没有数值,或者没有值,则默认值为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
此变量确定用于翻译双引号字符串的区域设置,前面带有’’$’(见区域翻译)。

LC_NUMERIC
此变量确定用于数字格式的区域设置类别。

LC_TIME
此变量确定用于数据和时间格式的区域设置类别。

LINENO
当前正在执行的脚本或shell函数中的行号。

LINES
由所使用的select命令,以确定打印选择列表列的长度。如果checkwinsize选项已启用(请参阅Shopt Builtin),或在收到a时在交互式shell中 自动设置SIGWINCH。

MACHTYPE
一个字符串,以标准GNU cpu-company-system格式完整描述执行Bash的系统类型。

MAILCHECK
shell应该多久(以秒为单位)检查MAILPATH或MAIL变量中指定的文件中的邮件。默认值为60秒。当需要检查邮件时,shell会在显示主要提示之前执行此操作。如果未设置此变量,或将该值设置为大于或等于零的数值,则shell将禁用邮件检查。

MAPFILE
创建一个数组变量,用于mapfile在未提供变量名时保存内置函数读取的文本 。

OLDPWD
由cdbuiltin 设置的上一个工作目录。

OPTERR
如果设置为值1,Bash将显示由getoptsbuiltin命令生成的错误消息。

OSTYPE
描述正在运行Bash操作系统的字符串。

PIPESTATUS
一个数组变量(请参阅Arrays),其中包含最近执行的前台管道(可能只包含一个命令)中的进程的退出状态值列表。

POSIXLY_CORRECT
如果此变量在Bash启动时处于环境中,则shell会在读取启动文件之前进入POSIX模式(请参阅Bash POSIX模式),就像–posix已提供调用选项。如果在shell运行时设置它,则Bash启用POSIX模式,就像命令一样

set -o posix
已被执行。当shell进入POSIX模式时,它会设置此变量(如果尚未设置)。

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

PROMPT_COMMAND
如果设置,则该值将被解释为在打印每个主要提示符($PS1)之前执行的命令。

PROMPT_DIRTRIM
如果设置为大于零的数字,则该值将用作展开\w和 \W提示字符串转义时要保留的尾随目录组件的数量(请参阅控制提示)。删除的字符将替换为省略号。

PS0
此参数的值将像PS1一样展开, 并在读取命令之后和执行命令之前由交互式shell显示。

PS3
此变量的值用作select命令的提示 。如果未设置此变量,则 select命令会提示’#? “

PS4
此参数的值像PS1一样 展开,扩展值是在命令行回显之前打印的提示-X选项已设置(请参阅Set Builtin)。必要时,将多次复制扩展值的第一个字符,以指示多个间接级别。默认为’+ ”。

PWD
由cd内置设置的当前工作目录。

RANDOM
每次引用此参数时,都会生成0到32767之间的随机整数。为此变量赋值会使随机数生成器生成种子。

READLINE_LINE
Readline行缓冲区的内容,用于’绑定-x’(见Bash Builtins)。

READLINE_POINT
Readline行缓冲区中插入点的位置,用于’绑定-x’(见Bash Builtins)。

REPLY
read内置的默认变量。

SECONDS
此变量扩展为自​​shell启动以来的秒数。对此变量的赋值会将计数重置为指定的值,并且展开的值将成为指定的值加上自分配以来的秒数。

SHELL
shell的完整路径名保存在此环境变量中。如果在shell启动时未设置它,Bash会为其分配当前用户的登录shell的完整路径名。

SHELLOPTS
以冒号分隔的已启用shell选项列表。列表中的每个单词都是有效的参数-oset内置命令的选项 (请参阅Set Builtin)。出现的选项SHELLOPTS是报告为’上’by’设置-o”。如果此变量在Bash启动时处于环境中,则在读取任何启动文件之前,将启用列表中的每个shell选项。这个变量是只读的。

SHLVL
每次启动Bash的新实例时增加1。这是为了计算嵌套Bash shell的深度。

TIMEFORMAT
此参数的值用作格式字符串,指定time 应如何显示以保留字为前缀的管道的计时信息。’’%'character引入了一个转义为时间值或其他信息的转义序列。逃逸序列及其含义如下; 括号表示可选部分。

%%
文字’%”。

%[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\t%3lS'

如果该值为null,则不显示任何计时信息。显示格式字符串时,将添加尾随换行符。

TMOUT
如果设置为大于零的值,TMOUT则将其视为read内置的默认超时(请参阅Bash Builtins)。的select命令(见条件结构,如果输入不之后到达)终止TMOUT时输入来自终端秒。

在交互式shell中,该值被解释为在发出主提示后等待输入行的秒数。如果完整的输入行没有到达,Bash会在等待该秒数后终止。

TMPDIR
如果设置,Bash将其值用作Bash为shell使用创建临时文件的目录的名称。

UID
当前用户的数字真实用户ID。这个变量是只读的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值