Bash中的那些有趣的内置变量
source link: https://www.lujun9972.win/blog/2018/11/29/bash%E4%B8%AD%E7%9A%84%E9%82%A3%E4%BA%9B%E6%9C%89%E8%B6%A3%E7%9A%84%E5%86%85%E7%BD%AE%E5%8F%98%E9%87%8F/index.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
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
脚本或函数中的当前行号,常用于调试
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会禁用行编辑功能
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK