特殊变量
在Shell中的特殊变量主要分别两种位置参数变量、状态变量两种。
位置参数变量
Shell中的位置参数变量主要是指0、0、1、$#等,主要用于从命令行、函数或脚本执行等地方传递参数。详细说明如下所示:
$0:获取当前执行的Shell脚本的文件名,如脚本中包含路径,则输出也包括路径 $n:获取当前执行的Shell脚本的第n个参数值,如n>9,则需要使用用大括号,如${10},各参数间用空格进行分隔 $#:获取当前执行的Shell脚本传入参数的总个数 $*:获取当前执行的Shell所有传入参数,如不加引号则与$@功能相同,如果添加双引号**"∗",则表示将所有传入参数视为单个字符串∗∗,相当于"∗",则表示将所有传入参数视为单个字符串∗∗,相当于"1 223" $@:获取当前执行的Shell所有传入参数,**如不加引号则与$*功能相同,如果添加双引号"@",则表示将所有传入参数视为独立的字符串∗∗,相当于"@",则表示将所有传入参数视为独立的字符串∗∗,相当于"1" "2""2""3"当"∗"和"∗"和"@"都添加双引号时,两者的功能有所区别;如不加,则功能相同,无区别。
位置参数变量示例
1、示例一:
[root@localhost Test]# cat para.sh#!/bin/bashecho $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} ${15}echo '$0 is:' $0echo '$1 is:' $1echo '$12 is:' ${12}echo '$# is:' $#echo '$* is:' $*echo '"$*"is:' "$*"echo '$@ is:' $@echo '"$@"is:' "$@"# 输出结果[root@localhost Test]# bash ~/Test/para.sh {a..z}a b c d e f g h i j k l m n o$0 is: /root/Test/para.sh$1 is: a$12 is: l$# is: 26$* is: a b c d e f g h i j k l m n o p q r s t u v w x y z"$*"is: a b c d e f g h i j k l m n o p q r s t u v w x y z$@ is: a b c d e f g h i j k l m n o p q r s t u v w x y z"$@"is: a b c d e f g h i j k l m n o p q r s t u v w x y z
1、传入的参数个数多于脚本定义的参数时,则多出的参数会忽略
2、传入的参数中如使用双引号,则会当作一个参数值进行传递
3、位置参数如大于9,需要使用${}进行传递
2、示例二:
[root@localhost Test]# cat testposition.sh #!/bin/bashecho '$# $1 $2 $3 $* $@'echo $# $1 $2 $3 $* $@echo "************"echo '$*'for tmp in $* do echo $tmp doneecho "************"echo "@@@@@@@@@@@@"echo '$@'for temp in $@ do echo $temp doneecho "@@@@@@@@@@@@"echo '"*"*"*"*"*"*'echo '$*'for i in "$*" do echo $i doneecho '"*"*"*"*"*"*'echo '"@"@"@"@"@"@'echo '$@'for j in "$@" do echo $j doneecho '"@"@"@"@"@"@'[root@localhost Test]# bash testposition.sh "Hello Jack" Welcome "to Shanghai"$# $1 $2 $3 $* $@3 Hello Jack Welcome to Shanghai Hello Jack Welcome to Shanghai Hello Jack Welcome to Shanghai************$* # 未加双引号,所以会输出全部参数,则第一个和第三个参数会拆开HelloJackWelcometoShanghai************@@@@@@@@@@@@$@ # 未加双引号,所以会输出全部参数,则第一个和第三个参数会拆开HelloJackWelcometoShanghai@@@@@@@@@@@@"*"*"*"*"*"*$* # 添加双引号后,传入的参数全部当一个参数进行输出Hello Jack Welcome to Shanghai"*"*"*"*"*"*"@"@"@"@"@"@$@ # 添加双引号后,传入的参数全部当独立的参数进行输出Hello JackWelcometo Shanghai"@"@"@"@"@"@
新闻热点
疑难解答