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 进行授权