【Bash百宝箱】shell环境变量有哪些

在shell中,有些环境变量如PATH、HOME、PWD等我们非常熟悉,有些则较为陌生,下面对shell现有的环境变量作个总结。

CDPATH:冒号分隔的一组目录名,用作内建命令cd的搜索路径。

HOME:当前用户主目录,也是内建命令cd不带参数时的目的路径,这个变量的值还用在波浪号扩展中。

IFS:用来分隔字段的一组字符,例如空格、水平制表符、换行符,在shell扩展中用于分隔单词。

MAIL:如果这个变量设置为一个文件名,且没有设置MAILPAH时,bash将通知用户在指定文件夹中有新邮件。

MAILPATH:冒号分隔的一组文件名,shell会在这些文件夹中定期检查有无新邮件,文件名后面可以是一个问号,接着是一则消息,有新邮件时就会显示指定消息,在消息文本中“$_”扩展为当前邮箱文件名。

OPTARG:内建命令getopts处理的上一个选项的参数。

OPTIND:内建命令getopts即将处理的下一个选项的索引。

PATH:冒号分隔的一组目录名,shell用它来搜索命令,长度为零的目录即空目录指当前目录,它可以在两个冒号之间,或者最前面的冒号的左边或最后面的冒号的右边。

PS1:主提示符,结尾为美元符号。

PS2:第二提示符,默认为右尖括号。
BASH:执行当前命令的bash完整路径。

BASHPID:当前bash的进程号,有时与“$$”不同,例如子shell不要求bash进行初始化。

BASH_ALIASES:一个键值对数组变量,元素同内建命令alias维护的别名列表,在这个数组变量中添加或删除元素也都会反应到alias别名列表。

BASH_ARGC:一个数组变量,其中的元素是当前bash的执行栈中每个帧的参数个数,当前子程序即shell函数或用内建命令source执行的shell脚本的参数个数在栈的顶端,执行子程序时,传递给它的参数被压入数组BASH_ARGV,只有shell运行在扩展的调试模式中才会设置这个数组。

BASH_ARGV:一个数组变量,包含当前bash的执行栈中的所有变量,最后一个子程序调用的最后一个参数在栈的顶端,而第一个子程序调用的第一个参数在栈的底部,在执行子程序时,传递给它的参数被压入数组BASH_ARGV,只有shell运行在扩展的调试模式中才会设置这个数组。

BASH_CMDS:一个键值对数组变量,元素同内建命令hash维护的散列表相对应,在这个数组变量中添加或删除元素也都会反应到hash散列表。

BASH_COMMAND:当前正在执行或即将执行的命令,如果这个命令来自内建命令trap,则表示触发trap的那个命令。

BASH_ENV:如果在启动bash执行shell脚本时设置了这个变量,它的值就会在执行脚本前进行扩展并当作初始化文件来读取。

BASH_EXECUTION_STRING:启动选项“-c”的命令参数。

BASH_LINENO:一个键值对数组变量,元素是与每个FUNCNAME对应的在源文件中调用的行号。

BASH_REMATCH:一个数组变量,元素由条件命令“[[”中的双目运算符“=~”来赋值,下标为0的元素是字符串中与整个正则表达式匹配的部分,下标为n的元素是字符串中与第n个括号的子模式匹配的部分,这个变量是只读的。

BASH_SOURCE:一个数组变量,其中的元素是与数组变量FUNCNAME的元素对应的源文件名。

BASH_SUBSHELL:每次创建一个子shell或在子shell环境中都把这个变量增加一,初始值为0。

BASH_VERSINFO:一个只读数组变量,元素为当前bash的版本信息,从下标0开始的数组元素依次为主版本号(发布号)、次版本号(版本号BASH_VERSION)、补丁级别、编译版本号、发布状态(如beta1)、MACHTYPE的值。

BASH_VERSION:当前bash版本号。

COLUMNS:内建命令select在打印待选列表时用这个变量来设置终端宽度,在收到信号SIGWINCH时这个变量会自动改变。

COMP_CWORD:在包含当前光标位置的单词“${COMP_WORDS}”中的下标,这个变量只能在可编程补全的shell函数中使用。

COMP_LINE:当前命令行,这个变量只能在可编程补全的shell函数中使用。

COMP_POINT:当前光标位置相对于当前命令行开头的下标,如果当前光标位置在当前命令行的尾部,则这个变量的值就与“${#COMP_LINE}”相同,这个变量只能在可编程补全的shell函数中使用。

COMP_TYPE:一个整数值,与触发调用补全函数时试图进行补全的类型相对应,正常补全为“TAB”,连续输入制表符后的补全列表为“?”,列出其它部分补全条目为“!”,没有修改单词而列出补全条目为“@”,补全菜单为“%”,这个变量只能在可编程补全的shell函数中使用。

COMP_KEY:触发当前补全函数的键,或键序列中的最后一个键。

COMP_WORDBREAKS:“readline”库进行单词补全时用作单词分隔的字符,如果没有设置这个变量,即使以后进行重置,它也会失去特殊作用。

COMP_WORDS:一个数组变量,包含当前命令行的每个单词,与“readline”一样当前行被COMP_WORDBREAKS拆分成单词,这个变量只能在可编程补全的shell函数中使用。

COMPREPLY:一个数组变量,bash从这个变量中读取可编程补全所调用的shell函数生成的补全条目。

DIRSTACK:一个数组变量,包含了当前目录栈的内容,目录在栈中按照内建命令dirs所显示的的顺序保存,可以通过对这个数组中元素赋值来修改栈中已有的目录,但必须用内建命令pushd和popd才能删除栈中的目录,对这个变量赋值时不会改变当前目录,如果没有设置这个变量,即使以后进行重置,它也会失去特殊作用。

EMACS:如果bash启动时设置了这个变量且值为“t”,就会认为它正在emacs的shell缓存中运行,并禁止行编辑。

EUID:当前用户的有效用户ID,为只读变量。

FCEDIT:内建命令fc使用选项“-e”时默认要使用的编辑器。

FIGNORE:进行文件名扩展时要忽略的冒号分隔的后缀,如果一个文件名的后缀和这个变量某个条目匹配,它就不会出现在匹配的文件名列表中,例如值为“.o:~”

FUNCNAME:一个数组变量,包含当前执行栈中所有shell函数的名称,下标为0的元素是当前正在执行的shell函数,而栈底是“main”,这个变量只有在执行shell函数时才有,对FUNCNAME赋值不会生效并且会返回一个错误状态,如果没有设置这个变量,即使以后进行重置,它也会失去特殊作用。

GLOBIGNORE:冒号分隔的一组模式,它定义了文件名扩展时所要忽略的文件名,在文件名扩展中,如果匹配了一个文件名,而这个文件名又和GLOBIGNORE中的一个模式匹配,则它将被从匹配列表中删除。

GROUPS:一个数组变量,包含当前用户所属的用户组,对GROUPS赋值不会生效并且会返回一个错误的状态,如果没有设置这个变量,即使以后进行重置,它也会失去特殊作用。

histchars:不超过三个字符,用来控制历史扩展、快速替换、符号化。其中的第一个是历史扩展字符,即表示历史扩展开始的字符,它通常是个感叹号。第二个字符如果出现在行的开头,则表示要进行快速替换,它通常是字符“^”。第三个字符是可选的,它如果是一个单词的第一个字符,就表示本行中剩余的部分是注释,它通常是字符“#”,历史注释字符使得历史替换忽略本行中剩余的单词,而不一定表示shell解释器会把剩余部分当成注释。

HISTCMD:历史号,即当前命令在历史中的索引号,如果没有设置这个变量,即使以后进行重置,它也会失去特殊作用。

HISTCONTROL:冒号分隔的一组值,它控制命令怎么在历史中保存。如果值中包含“ignorespace”,则不在历史中保存以空格开头的行,值为“ignoredups”表示不保存与前一历史条目匹配的行,值为“ignoreboth”表示“ignorespace”和“ignoredups”,值为“erasedups”表示在保存本行时首先删除与本行匹配的前一行,此外的所有值都会被忽略。如果没有设置这个变量,或它不包含有效的值,则shell解释器会根据HISTIGNORE的值在历史中保存所有读取的行。多行命令的第二个和其余行不会进行如上的检测,不管这个变量如何设置都会保存到历史中。

HISTFILE:用来保存命令历史的文件,默认值是 “~/.bash_history”。

HISTFILESIZE:历史文件中包含的最多行数,如果给这个变量赋值,历史文件就会在必要时删除最早的记录,以保证不超过指定的行数,当交互式的shell退出运行时也会删除这个文件中的最早记录并只保留不超过指定的行数,这个变量的默认值是500。

HISTIGNORE:冒号分隔的一组模式,用以决定哪些命令可以保存在历史中,每个模式都定位在行的开头,必须和整行匹配(没有隐式加上“*”),在进行HISTCONTROL指定的检查后,每个模式都会和当前行匹配,除了shell中通常的模式匹配字符,还可以用“&”来匹配历史中的前一行,如果要使用“&”本身,可以用反斜杠转义,在匹配之前,这个反斜杠将被删除。多行命令的第二个和其余行不会进行检测,不管这个变量如何设置都会保存到历史中。HISTIGNORE包括了HISTCONTROL的功能,“&”模式与“ignoredups”是等价的,而“[ ]*”模式和ignorespace是等价的,把这两个模式用冒号连接起来就和“ignoreboth ”是等价的。

HISTSIZE:历史中保存的最多命令个数,默认值是500。

HISTTIMEFORMAT:如果设置了这个变量且不为空,它的值将用作strftime的格式字符串,并被内部命令history显示历史条目时打印每条历史的时间戳。如果设置了这个变量,时间戳也会写入到历史文件中以便在不同的shell会话中保留这些信息。它使用历史注释字符以便把时间戳和其它历史行区别开来。

HOSTFILE:指定一个格式与“ /etc/hosts” 相同的文件,以便shell补全主机名时使用。在shell运行时可以更改主机名补全的条目。改变这个值后再进行主机名补全时,bash会把新文件中的内容加入到已有的列表中。如果设置了这个变量却没有指定值,bash就试图读取“ /etc/hosts” 来获得主机名补全的条目。如果重置这个变量,就会清空主机名列表。

HOSTNAME:当前主机的名称。

HOSTTYPE:一个字符串,它描述了运行bash的机器的类型。

IGNOREEOF:控制着shell读取到“EOF”字符作为整个输入时的行为。如果设置了,它的值表示连续“EOF”字符的个数;如果shell输入的行首有这么多“EOF”,就会退出。如果设置了这个变量,而其值却不是数值或没有值,则默认为10。如果这个变量不存在,“EOF”字符就表示shell输入的结束。这只有在交互式的shell中才有效。

INPUTRC:“readline”初始化文件的名称,用来覆盖默认值“~/.inputrc”。

LANG:如果语言类别没有特别地用“LC”开头的变量指定,就用这个变量来指定语言类别。

LC_ALL:这个变量覆盖变量LANG和其它LC开头的变量指定的语言类别。

LC_COLLATE:这个变量决定文件名扩展结果的排序顺序,以及文件名扩展和文件名匹配中的范围表达式、等价字符类、语言区域序列。

LC_CTYPE:这个变量决定文件名扩展和模式匹配中对字符的解释和字符类的行为。

LC_MESSAGES:这个变量决定翻译“$”后面的双引用字符串时所使用的语言区域。

LC_NUMERIC:这个变量决定格式化数字时所使用的语言区域。

LINENO:当前执行的脚本或shell函数的行号。

LINES:内建命令“select”在打印待选条目时所用的列宽度,这个值会在接收到SIGWINCH信号后自动更新。

MACHTYPE:对正在运行bash的系统,一个能完整描述系统类型的字符串,它的格式是GNU标准“CPU-COMPANY-SYSTEM”。

MAILCHECK:shell检查邮件的频度,以秒为单位,邮件存放在MAILPATH或MAIL变量指定的文件中。默认值是 60 秒。到达检查邮件的时间时,shell会先检查邮件再显示主提示符。如果这个变量没有设置,或设为一个不大于或等于零的数,则shell就禁用邮件检查。

OLDPWD:内建命令cd所设置的上一个工作目录。

OPTERR:如果设为1,bash会显示内建命令getopts所产生的错误。

OSTYPE:一个字符串,描述了正运行bash的操作系统的类型。

PIPESTATUS:一个数组变量,包含最近在前台执行的管道(可能只有一个命令)中进程的退出状态。

POSIXLY_CORRECT:如果bash启动时这个变量在环境中,shell就会在读取初始化文件之前进入POSIX模式,就好像指定了“–posix”启动选项一样。如果在shell运行中设置这个变量,bash也会进入POSIX模式,就好像执行了“set -o posix”命令一样。

PPID:shell父进程的进程号,这个值是只读的。

PROMPT_COMMAND:如果设置了,它的值就被当作每次显示主提示符“$PS1”之前要执行的命令。

PROMPT_DIRTRIM:如果设为一个大于零的数,这个值就是扩展提示符中的转义字符”\w“”\W“时要保留的目录节点数目,删除的字符用省略号来代替。

PS3:这个变量的值用作内建命令select的提示符,如果没有设置这个变量,select命令就把”#?“作为提示符。

PS4:它的值用作回显命令时的提示符,可以用内建命令set的”-x“选项打开命令回显。这个变量的第一个字符在必要时将被重复显示以表示多层间接变量,默认值是”+ “。

PWD:内建命令cd所设置的当前工作目录。

RANDOM:每次使用这个变量都会随机生成一个0到32767之间的整数,对这个变量赋值就会给随机数发生器赋于不同的种子。

REPLY:内建命令read的默认变量。

SECONDS:这个变量扩展为shell从启动到现在经过的秒数,对这个变量赋值就会把这个时间计数器设为赋与的值,而这个变量的扩展值就成为赋与的值加上赋值后所经过的秒数。

SHELL:这个环境变量保存shell的完整路径。如果shell启动时没有设置它,bash就把当前用户的登录shell的完整路径赋值给它。

SHELLOPTS:冒号分隔的所有启用的shell选项;其中的每个单词都是内建命令set的”-o“选项的参数。这些选项是”set -o”命令显示为”on“的条目。如果启动bash时环境中有这个变量,则shell会在读取初始化文件之前打开其中的每个选项。这个变量是只读的。

SHLVL:每次启动一个新的bash时这个变量都增加一。它是为计算shell的嵌套层次而设的。

TIMEFORMAT:这个变量的值用作格式化字符串上,它决定带有time关键字的管道怎么显示时间信息。”%“引导一个转义序列,可以扩展为时间值或其它信息。转义序列的含义如下,其中的方括号表示可选的部分。

%%           表示”%“本身。
%[p][l]R    已经经历的时间,以秒为单位。
%[p][l]U    用户模式下所使用的CPU时间,以秒为单位。
%[p][l]S    系统模式下所使用的CPU时间,以秒为单位。
%P           CPU使用百分比,即(%U+%S)/%R。

其中可选的p是一个指定显示精度的数字,即小数点后的小数位数。0 表示不显示小数点和后面的小数。最多只能指定显示三位,比3大的数值将被改为3,如果没有指定p,则使用 3。可选的l指定使用长格式“MM mSS.FFs”,其中包括分钟。p的值决定是否包括小数部分。如果这个变量没有设置,bash就把它当成$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'。如果这个值为空,则不显示时间信息。在显示格式化后的信息时,会自动在末尾加上一个换行符。

TMOUT:如果设为一个大于零的值,它就是内建命令read默认的超时时间。如果输入是来自终端并且在TMOUT秒内没有输入,则select命令也会结束。在交互式的shell中,这个值表示打印提示符以后等待输入时的秒数,如果在这段时间内没有输入,bash就会退出。

TMPDIR:如果设置了,bash就用它的值作为目录名并根据shell需要在这个目录中创建临时文件。

UID:当前用户的实际用户ID,只读变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值