Bash shell中的位置参数$#,$*,$@,$0,$1,$2...及特殊参数$?,$-等的含义
$1~$n
位置参数。传入程序或函数式的参数,第一个参数为$1,第二个参数为$2,以此类推。注意,如参数n在9个以上,则用$(n)表示,例如第10个表示为:$(10)
$0
代表执行程序的名称。
$*
代表所有的位置参数,并且视为一个字符。例如:test.sh ABC 123 xyz,则$*的内容为字符串“ABC 123 xyz”。
$@
代表所有的位置参数,但$@代表各位置参数组成的串行。例如:test.sh ABC 123 xyz,则$@的内容为字符串“ABC”,“123”,“xyz”。即参数列表。
$#
位置参数的个数。例如:test.sh ABC 123 xyz,有3个参数,$#的值为3。
下面用一个脚本来测试一下
#!/bin/bash
echo "第一个参数:$1"
echo "第二个参数:$2"
echo "参数个数:$#"
echo "文件名字:$0"if [ $# -eq 3 ];then
set "$*"
echo "所有的参数为一个字符串:$1"
echo "第二个为空的:$2"
echo "第二个不会显示"elif [ $# -eq 2 ];then
set "$@"
echo "参数会打散,这是第一个:$1"
echo "参数会打散,这是第二个:$2"
echo "显示参数列表"fi
保存为test,然后分别试着输入:bash test abc 123和bash test abc 123 aabbcc试一下
上面这个脚本,当参数是3个时,执行$*这个命令。当参数是2个时,执行$@这个命令。
其他的特殊参数
$-
传递给脚本的falg(使用set 命令).
注意:这起初是ksh 的特征,后来被引进到Bash 中,但不幸的是,在Bash 中它看上去也不能可靠的工作.使用它的一个可能的方法就是让这个脚本进行自我测试(查看是否是交
互的).
$!
上一个后台程序的进程编号
$_
保存之前执行的命令的最后一个参数.
$?
上一个命令执行结束后传回值。(在Linux中,命令退出状态为0表示该命令正确执行,任何非0值表示命令出错。)
$$
目前bash shell的进程编号
$_
有三种用途:1)script执行时,bash的绝对路径,例如:/bin/bash。2)上一个命令执行结束时,最后一个位置参数,如上一个命令是:bash test abc 123 aabbcc,则$_的值为"aabbcc"。3)检查邮件时,$_的值为邮件文件名。