欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

内部变量

程序员文章站 2022-07-10 08:28:54
...

内部变量

内建变量
    这些变量将会影响bash脚本的行为.

$BASH
    Bash的二进制程序文件的路径.

$BASH_ENV
    这个环境变量会指向一个Bash的启动文件, 当一个脚本被调用的时候, 这个启动文件将会被读取.

$BASH_SUBSHELL
    这个变量用来提示子shell的层次. 这是一个Bash的新特性.

$BASH_VERSINFO[n]
    这是一个含有6个元素的数组, 它包含了所安装的Bash的版本信息.

#!/bin/bash
# Bash Version info

for n in 0 1 2 3 4 5
do
    echo "BASH_VERSINFO[$n] =${BASH_VERSINFO[$n]}
done

$DIRSTACK
    在目录栈中最顶端的值. (将会受到pushd和popd的影响)

$EDITOR
    脚本所调用的默认编辑器, 通常情况下是vi或者是emacs.

$EUID
    ”有效”用户ID.

$FUNCNAME
    当前函数的名字.

$GLOBIGNORE
    一个文件名的模式匹配列表,如果在通配(globbing)中匹配到的文件包含有这个列表中的某个文件, 那么这个文件将被从匹配到的结果中去掉.

$GROUPS
    目前用户所属的组.

$HOME
    用户的home目录,一般是/home/username.

$HOSTNAME
    hostname放在一个初始化脚本中, 在系统启动的时候分配一个系统名字. 然而,gethostname()函数可以用来设置这个Bash内部变量 $HOSTNAME .

$HOSTTYPE
    主机类型.
    就像$MACHTYPE,用来识别系统硬件.

$IFS
    内部域分隔符.

$IGNOREEOF
    忽略EOF: 告诉shell在log out之前要忽略多少文件结束符(control-D).

$LC_COLLATE
    常在 .bashrc 或 /etc/profile 中设置, 这个变量用来控制文件名扩展和模式匹配的展开顺序.

$LC_CTYPE
    这个内部变量用来控制通配(globbing)和模式匹配中的字符串解释.

$LINENO
    这个变量用来记录自身在脚本中所在的行号. 这个变量只有在脚本使用这个变量的时候才有意义,并且这个变量一般用于调试目的.

$MACHTYPE
    机器类型.
    标识系统的硬件.

$OLDPWD
    之前的工作目录.

$OSTYPE
    操作系统类型.

$PATH
    可执行文件的搜索路径, 一般为 /usr/bin/ ,/usr/X11R6/bin/ , /usr/local/bin ,等等.

$PIPESTATUS
    这个数组变量将保存最后一个运行的前台管道的退出状态码. 相当有趣的是, 这个退出状态码和最后一个命令运行的退出状态码并不一定相同.

$PPID
    进程的 $PPID 就是这个进程的父进程的进程ID( pid ).

$PROMPT_COMMAND
    这个变量保存了在主提示符 $PS1 显示之前需要执行的命令.

$PS1, $PS2, $PS3, $PPS4
    主提示符,第二提示符,第三提示符,第四提示符.

$PWD
    工作目录(你当前所在的目录)
    这与内建命令pwd作用相同.

$REPLY
    当没有参数变量提供给read命令的时候, 这个变量会作为默认变量提供给read命令. 也可以用于select菜单, 但是只提供所选择变量的编号, 而不是变量本身的值.

$SECONDS
    这个脚本已经运行的时间(以秒为单位).

$SHELLOPTS
    shell中已经**的选项的列表, 这是一个只读变量.

$SHLVL
    Shell级别, 就是Bash被嵌套的深度. 如果是在命令行中, 那么SHLVL1,SHLVL为2.

$TMOUT
    如果 $TMOUT 环境变量被设置为非零值time的话, 那么经过time秒后, shell提示符将会超时. 这将会导致登出(logout).
例:

#!/bin/bash
# timed-input.sh

TMOUT=3                                     # 提示输入时间为3s

echo "What's your name?"
echo "Quickly now,you only have $TMOUT seconds to answer!"
read name

if [ -z "$name" ]
then 
    name="(no answer)"
fi

echo "Your name is $name."

位置参数

$0 , $1 , $2 ,等等.
    位置参数, 从命令行传递到脚本, 或者传递给函数, 或者set给变量

$#
    命令行参数或者位置参数的个数.

$*
    所有的位置参数都被看作为一个单词.
    * ” $* “必须被引用起来.

$@
    与$*相同, 但是每个参数都是一个独立的引用字符串, 这就意味着, 参数是被完整传递的, 并没有被解释或扩展. 这也意味着, 参数列表中每个参数都被看作为单独的单词.

其他的特殊参数

$-
    传递给脚本的标记(使用set命令)

$!
    运行在后台的最后一个作业的PID(进程ID).

$_
    这个变量保存之前执行的命令的最后一个参数的值.

$?
    命令, 函数, 或者是脚本本身的退出状态码

$ID.$ 变量在脚本中经常用来构造”唯一的”临时文件名.