#Bash中的位置参数和特殊参数
#Bash中的位置参数是由0以外的一个或多个数字表示的参数。
#位置参数是当Shell或Shell函数被引用时由Shell或Shell函数的参数赋值,并且可以使用Bash的内部命令set来重新赋值。位置参数N可以被引用为${N},或当N只含有一个数字时被引用为$N
# $ set 1 2 3 four five six 7 8 9 ten
# $ echo "$1 $2 $3 $4 $5 $6 $7 $8 $9 ${10}"
# 1 2 3 four five six 7 8 9 ten
#位置参数不能通过赋值语句来赋值,而只能通过Bash的内部命令set和shift来设置和取消它们。当Shell函数运行时,位置参数会被临时地替换。
1 #=========================================================================================== 2 # 3 # 4 # FILE:param.sh 5 # USAGE:./param.sh 6 # DESCRIPTION: 7 # 8 # OPTIONS:--- 9 # REQUIREMENTS:--- 10 # BUGS:--- 11 # NOTES:--- 12 # AUTHOR:Yuan Shaoqian,yuanshaoqiancom@gmail.com 13 # ORGANIZATION: 14 # CREATED:09/02/2016 22:38 15 # REVISION:--- 16 #=========================================================================================== 17 echo "Argument 1 : $1" 18 echo "Argument 2 : $2" 19 echo "Argument 3 : $3" 20 echo "Argument 4 : $4" 21 echo "Argument 5 : $5" 22 <<COMMENT 23 root@yuan:/root # ./param.sh one two three four five 24 Argument 1 : one 25 Argument 2 : two 26 Argument 3 : three 27 Argument 4 : four 28 Argument 5 : five
29 COMMENT
特殊参数:
Bash对一些参数的处理比较特殊,这些参数只能被引用,但不能修改它们的值,这些参数分别是*、@、#、?、-、$、!、0、_
1、特殊参数*,将扩展为从1开始的所有位置参数。如果扩展发生在双引号内,即“$*”,则扩展为包含每个参数值的单词,每个参数值用特殊变量IFS的第一个字符分隔:“$*”等价于“$1c$2c$3c...”,其中c就是IFS中第一个字符,如果变量IFS没有定义任何字符,则参数之间默认用空格分隔。如果IFS为空,则参数直接相连,中间没有分隔。
例1:
1 $ set one two three 2 $ echo "$*" 3 one two three
例2:
1 $ IFS=":;" 2 $ set one two three 3 $ echo "$*" 4 one:two:three
2、特殊参数@
特殊参数@,也将扩展为1开始的所有位置参数。但当它的扩展发生在双引号内时,每个参数都扩展为分隔的单词:“$@”,等价于“$1”、“$2”、“$3”.....参数@和*之间的区别在于将于for循环的调用中显现出来。
3、特殊参数#
特殊参数#,将扩展为位置参数的个数,用十进制表示:
1 $ set one two three 2 $ echo $# 3 3
4、特殊参数?
特殊参数?,将扩展为最近一个前台执行的命令的退出状态。可以使用它来检测shell脚本执行是否成功,通常退出状态为0表示命令已经没有任何错误地结束运行。
例:
1 $ touch newfile 2 $ echo $? 3 0 4 5 $ls newfile 6 $ echo $? 7 0 8 9 $ rm -f newfiile 10 $ echo $? 11 0 12 13 $ ls newfile 14 $ echo $? 15 2
未完成