您当前的位置:首页 > 计算机 > 系统应用 > Linux

Bash 中的那些有趣的内置变量

时间:12-14来源:作者:点击数:

Bash 中定义了大量的内置变量,有些变量颇为有趣,摘录如下:

BASH 自身信息

BASH / SHELL

BASH 和 SHELL 变量记录的是当前 shell 的路径,linux 上通常这两个变量的值都是 /bin/bash,这两者的区别在于,不是所有的shell都有定义 BASH 变量,但一定有定义 SHELL 变量。

另外,当在一个 shell 中启动另一个 shell 的时候, SHELL 变量的值不会发生改变,而 BASH 变量的值会发生改变,指向新 shell 的路径。如下所示:

sh-4.4$ echo $SHELL
/bin/bash
sh-4.4$ echo $BASH
/usr/bin/sh
sh-4.4$ 

BASH_VERSINFO

该变量定义了一个6元素的数组,用于表示当前 bash 的版本信息,这六个元素的意义分别为:

BASH_VERSINFO[0]
主版本号
BASH_VERSINFO[1]
次版本号
BASH_VERSINFO[2]
补丁版本
BASH_VERSINFO[3]
编译版本
BASH_VERSINFO[4]
发行状态
BASH_VERSINFO[5]
硬件架构。

BASHPID

当前bash进程的进程号

BASH_ARGC

该数组变量存储的是每个bash调用栈中传递给bash的参数数量。该变量只有在bash开启extdebug选项的情况下才会设置

BASH_ARGV

该数组变量存储的是每个bash调用栈中传递给bash的参数列表。该变量只有在bash开启extdebug选项的情况下才会设置

BASH_COMMAND

当前正在(或马上要)执行的命令

BASH_EXECUTION_STRING

bash -c 选项的参数

FUNCNAME

当前正在执行函数的名称,常用于调试

BASH_SOURCE

FUNCNAME 所定义的源文件,其中 ${FUNCNAME[$i]} 定义在 ${BASH_SOURCE[$i]} 文件中

LINENO

脚本或函数中的当前行号,常用于调试

PPID

shell父进程进程号

SECONDS

脚本从运行以来经过的时间(单位为秒)。可用于调试性能。

start=$SECONDS
sleep 2
pass=$(($SECONDS - $start))
echo "$pass seconds passed"
2 seconds passed

SHELLOPTS

冒号分隔的处于开状态的shell选项列表。该变量只能通过 set -o(打开选项) / set +o(关闭选项) 来设置。

SHLVL

Shell嵌套的层次,第一个shell的$SHLVL为1,每启动一个bash实例就会+1

COLUMNS

终端的宽度

LINES

终端的高度

EMACS

判断 bash 是否在 EMACS 中执行,这种情况下 bash 会禁用行编辑功能

用户信息

EUID

当前用户的有效用户 ID,它在 shell 启动时被设置,之后无法再被修改。

GROUPS

当前用户所属组ID的列表

UID

当前用户ID

USER

当前用名

HOME

用户的个人目录地址

主机信息

HOSTNAME

当前主机名

HOSTTYPE

当前主机类型

OSTYPE

操作系统类型

MACHTYPE

包含了主机类型和操作系统类型

显示相关

PS1 / PS2 / PS3 / PS4 / PROMPT_DIRTRIM

定义提示符

TIMEFORMAT

指定显示时间信息的格式

影响 bash 行为的参数

BASH_ENV

该值为shell初始化文件的路径,若设置了该值则会执行该值所指定文件内的初始化命令

CDPATH cd 命令的搜索路径,是一个用冒号分隔的目录列表。shell 在执行 cd 命令时会从这些指定的目录列表中寻找要进入的目标路径。

FCEDIT

内建命令fc默认的编辑器

FIGNORE

由冒号分隔的后缀名列表,在进行文件名补全时会忽略以这些后缀名结尾的文件名

GLOBIGNORE

它是由冒号分隔的模式列表,表示通配时忽略的文件名集合。

IFS

内部字段分隔符,影响 read 命令如何将行进行分成词

OSIXLY_CORRECT

设定让bash进入posix mode

TMOUT

用于设置Shell的过期时间,TMOUT 不为0时,shell 会在 TMOUT 秒后将自动退出.

同时 TMOUT 也用于作为 read 命令的默认超时时间。

EXECIGNORE

它是由冒号分隔的模式列表,表示在 $PATH 中搜索命令时忽略的文件名集合。

TMPDIR

若设置了,则bash在该值所指定的目录下创建临时文件

其他

BASH_REMATCH

当使用 =~ 进行正则匹配时,该数组变量存储的是整体或个分组匹配的字符串位置,其中

${BASH_REMATCH[0]}
整个正则表达式匹配的位置
n
第n个分组匹配的位置

OLDPWD

上一次 cd 的工作目录

PWD

当前工作目录

RANDOM

产生一个 0-32767 之间的随机整数

REPLY

read 命令默认将标准输入存入该变量,select 命令也默认将选择的序号存入该变量。

PROMPT_COMMAND

该变量是一个命令,每次现实主提示符之前都会执行该命令。

DIRSTACK

存放但前目录栈的数组,pushd 和 popd 两个内建命令需要操作该数组,同时也允许手工对该数组内的变量进行赋值从而影响 pushd 和 popd 的行为。 另外,该参数的值可以通过 dirs 命令来显示

COMP_CWORD / COMP_LINE / COMP_POINT / COMP_WORDS / COMPREPLY / HOSTFILE

用于为bash自定义补全时使用

HISTCONTROL / HISTFILE / HISTFILESIZE / HISTIGNORE / HISTSIZE

配置history命令的行为

MAIL / MAILCHECK / MAILPATH

影响邮件提醒行为

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐