Bash 中定义了大量的内置变量,有些变量颇为有趣,摘录如下:
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$
该变量定义了一个6元素的数组,用于表示当前 bash 的版本信息,这六个元素的意义分别为:
当前bash进程的进程号
该数组变量存储的是每个bash调用栈中传递给bash的参数数量。该变量只有在bash开启extdebug选项的情况下才会设置
该数组变量存储的是每个bash调用栈中传递给bash的参数列表。该变量只有在bash开启extdebug选项的情况下才会设置
当前正在(或马上要)执行的命令
bash -c 选项的参数
当前正在执行函数的名称,常用于调试
FUNCNAME 所定义的源文件,其中 ${FUNCNAME[$i]} 定义在 ${BASH_SOURCE[$i]} 文件中
脚本或函数中的当前行号,常用于调试
shell父进程进程号
脚本从运行以来经过的时间(单位为秒)。可用于调试性能。
start=$SECONDS
sleep 2
pass=$(($SECONDS - $start))
echo "$pass seconds passed"
2 seconds passed
冒号分隔的处于开状态的shell选项列表。该变量只能通过 set -o(打开选项) / set +o(关闭选项) 来设置。
Shell嵌套的层次,第一个shell的$SHLVL为1,每启动一个bash实例就会+1
终端的宽度
终端的高度
判断 bash 是否在 EMACS 中执行,这种情况下 bash 会禁用行编辑功能
当前用户的有效用户 ID,它在 shell 启动时被设置,之后无法再被修改。
当前用户所属组ID的列表
当前用户ID
当前用名
用户的个人目录地址
当前主机名
当前主机类型
操作系统类型
包含了主机类型和操作系统类型
定义提示符
指定显示时间信息的格式
该值为shell初始化文件的路径,若设置了该值则会执行该值所指定文件内的初始化命令
内建命令fc默认的编辑器
由冒号分隔的后缀名列表,在进行文件名补全时会忽略以这些后缀名结尾的文件名
它是由冒号分隔的模式列表,表示通配时忽略的文件名集合。
内部字段分隔符,影响 read 命令如何将行进行分成词
设定让bash进入posix mode
用于设置Shell的过期时间,TMOUT 不为0时,shell 会在 TMOUT 秒后将自动退出.
同时 TMOUT 也用于作为 read 命令的默认超时时间。
它是由冒号分隔的模式列表,表示在 $PATH 中搜索命令时忽略的文件名集合。
若设置了,则bash在该值所指定的目录下创建临时文件
当使用 =~ 进行正则匹配时,该数组变量存储的是整体或个分组匹配的字符串位置,其中
上一次 cd 的工作目录
当前工作目录
产生一个 0-32767 之间的随机整数
read 命令默认将标准输入存入该变量,select 命令也默认将选择的序号存入该变量。
该变量是一个命令,每次现实主提示符之前都会执行该命令。
存放但前目录栈的数组,pushd 和 popd 两个内建命令需要操作该数组,同时也允许手工对该数组内的变量进行赋值从而影响 pushd 和 popd 的行为。 另外,该参数的值可以通过 dirs 命令来显示
用于为bash自定义补全时使用
配置history命令的行为
影响邮件提醒行为

