2010年1月18日星期一

bash中的位置参数和特殊参数

$1,$2 ... $9
通过位置参数引用命令行中的参数。如果需要引用9个之后的参数,必须用到大括号:${10}。

$0
命令的名字

$$
shell把执行shell进程的PID存储在$$中。

$!
后台运行的进程的PID

$?
上一个命令的返回状态码

$#
除了命令自身,命令行参数的个数

$*
包含所有的命令行参数。只产生一个参数

$@
包含所有的命令行参数。生成的是一串参数,其中每个位置的参数仍然是一个单独的参数。

$*和$@的对比
首先了解一下set的含义。set命令吧set后面的一个或几个参数赋值给位置参数。例如脚本a.sh
set this is it
echo $3 $2 $1
运行脚本./a.sh
it is this
不带任何参数运行set,会显示所有设置好的shell变量

然后看下面两个脚本
a.sh
set "$*"
echo 1: $1
echo 2: $2
echo 3: $3
运行命令./a.sh a b c 的结果是:
1: a b c
2:
3:

b.sh
set "$@"
echo 1: $1
echo 2: $2
echo 3: $3
运行命令./b.sh a b c 的结果是:
1: a
2: b
3: c

因此在shell脚本中$@用的更广泛一些。

没有评论: