文章

shell参数特殊变量符号

Shell 特殊参数解释

首先来看几个特殊变量:$0, $#, $*, $@, $?, $$, $_

1
2
3
4
5
6
7
8
9
10
#!/bin/bash
echo $0    # 当前脚本的文件名(间接运行时还包括绝对路径)。
echo $n    # 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是 $1 。
echo $#    # 传递给脚本或函数的参数个数。
echo $*    # 传递给脚本或函数的所有参数。
echo $@    # 传递给脚本或函数的所有参数。被双引号 (" ") 包含时,与 $* 不同,下面将会讲到。
echo $?    # 上个命令的退出状态,或函数的返回值。
echo $$    # 当前 Shell 进程 ID。对于 Shell 脚本,就是这些脚本所在的进程 ID。
echo $_    # 上一个命令的最后一个参数
echo $!    # 后台运行的最后一个进程的 ID 号

执行结果如下:

1
2
3
4
5
6
7
8
9
10
11
$ ./test.sh test test1 test2 test3 test4

./test.sh                      # $0
                               # $n
5                              # $#
test test1 test2 test3 test4   # $*
test test1 test2 test3 test4   # $@
0                              # $?
12305                          # $$
12305                          # $_
                               # $!

参数中的双引号

$*$@ 都表示传递给函数或脚本的所有参数,不被双引号 (“”) 包含时,都以 $1""$2" … "$n 的形式输出所有参数。

但是当它们被双引号 (“”) 包含时,"$*" 会将所有的参数作为一个整体,以 $1 $2 … $n 的形式输出所有参数;$@ 会将各个参数分开,以 "$1""$2" … "$n" 的形式输出所有参数。

传递参数方式一

采用 $0, $1, $2 … 等方式获取脚本命令行传入的参数,值得注意的是,$0 获取到的是脚本路径以及脚本名,后面按顺序获取参数,当参数超过10个时(包括10个),需要使用${10}, ${11}….才能获取到参数。

1
2
3
4
#!/bin/bash
echo "脚本$0"
echo "第一个参数$1"
echo "第二个参数$2"

运行结果:

1
2
3
4
5
6
$ ./test.sh 1 2
 
#shell中将会输出:
脚本./test.sh
第一个参数1
第二个参数2
本文由作者按照 CC BY 4.0 进行授权