3

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

 3 years ago
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.
neoserver,ios ssh client

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会禁用行编辑功能


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK