目录

Shell系统内置变量

在命令行提示符直接执行 env、set 查看系统或环境变量。env 显示用户环境变量,set 显示 Shell 预先定义好的变量以及用户变量。可以通过 export 导出成用户变量。

BASH / SHELL

BASH 和 SHELL 变量记录的是当前 shell 的路径, linux 上通常这两个变量的值都是 / bin/bash.

这两者的区别在于,不是所有的 shell 都有定义 BASH 变量,但一定有定义 SHELL 变量。

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

  1. sh-4.4$ echo $SHELL
  2. /bin/bash
  3. sh-4.4$ echo $BASH
  4. /usr/bin/sh
  5. 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]

硬件架构。

  1. #!/bin/bash
  2. for((i=0;i<=5;i++));do
  3. echo "BASH_VERSINFO[$i]=${BASH_VERSINFO[$i]}"
  4. done
  5. ~
  1. BASH_VERSINFO[0]=3
  2. BASH_VERSINFO[1]=2
  3. BASH_VERSINFO[2]=57
  4. BASH_VERSINFO[3]=1
  5. BASH_VERSINFO[4]=release
  6. BASH_VERSINFO[5]=x86_64-apple-darwin18

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]} 文件中

SECONDS

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

  1. start=$SECONDS
  2. sleep 2
  3. pass=$(($SECONDS - $start))
  4. echo "$pass seconds passed"

SHELLOPTS

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

SHLVL

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

EMACS

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

用户信息

EUID

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

显示相关

PS1 / PS2 / PS3 / PS4 / PROMPT_DIRTRIM

定义提示符

影响 bash 行为的参数

BASH_ENV

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

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

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 个分组匹配的位置

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

影响邮件提醒行为

原文链接:https://rumenz.com/shell/shell-system-var.html
↑回到顶部↑
入门小站 @2018