盈盈一水间,脉脉不得语

Shell特殊变量

前面已经介绍,变量只能由字母开头,并且只能包含字母,数字,下划线组成。

然而,shell中还有一类变量不符合这种命名规则,这种变量具有特殊含义,被称为特殊变量。shell中常见的特殊变量有 $0,$#,$*,$@,$?,$$和命令行参数。

特殊变量列表

变量 含义
$0 当前脚本的文件名
$# 传递给脚本或函数的参数个数
$* 传递给脚本或函数的所有参数
$@ 传递给脚本的所有你参数。被""包含时,与$*稍有不同
$n 传递给脚本或函数的参数。n是一个数字,代表第几个参数
$? 上个命令的退出状态或函数的返回值
$$ 当前shell的进程ID,就是脚本的ID。

命令行参数

运行脚本时传递给脚本的参数称为命令行参数。命令行参数用 $n 表示,例如,$1 表示第一个参数,$2 表示第二个参数,依次类推。

注意,$0其实可以合并到$n的范围内。因为,执行一个脚本时,命令中的第0个参数即为文件名。如:

./tesh.sh aaa bb

其中,./test.sh即为文件名$0,也即命令中的第0个参数$0。

$*和$@的区别

当$*和$@都不被""包含时,两者功能基本一致,即都以$1,$2,$3…的方式输出。

当$*和$@被""包含时,即"$*"和"$@","$*"会将所有参数当成一个整体,而"$@"依旧会被分割成$1,$2,$3…如我们执行./test.sh "a" "b" "c" "d",并且tesh.sh 中有如下内容:

#!/bin/bash
echo $*    #此处输出"a b c d"
echo $@    #此处输出"a b c d",与$*相同
echo "$*"    #此处输出"a b c d"
echo "$@"    #此处输出"a b c d"
for var in  $*
do
    echo $var
done
#此处输出
#a
#b
#c
#d
for var in $@
do
    echo $var
done
#此处输出同上
for var in "$*"
do
    echo $var
done
#此处输出"a b c d"
#注意两都不同之处在此,"$*"把所有参数合并成一个参数了
for var in "$@"
do
    echo $var
done
#此处输出
#a
#b
#c
#d
#可见,"$@"并没有把所有参数合并成一个参数

退出状态$?

使用$?可以获得上一个命令的退出状态,所谓退出状态即为上一个命令的返回结果。

退出状态在是个数值。

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注