Shell 特殊变量1.特殊变量名和含义
变量名 含义 $0 脚本名字 $1 位置参数 #1 $2 - $9 位置参数 #2 - #9 ${10} 位置参数 #10 $# 位置参数的个数 sh test.sh XX YY , $#就是2 是表示参数的个数 $? 上个命令执行后,返回的执行命令状态结果, 或者是函数的返回值 "$*" 所有的位置参数(作为单个字符串) * "$@" 所有的位置参数(每个都作为独立的字符串) $$ 当前shell进程ID。 ${#*} 传递到脚本中的命令行参数的个数 ${#@} 传递到脚本中的命令行参数的个数 $_ 之前命令的最后一个参数 $! 运行在后台的最后一个作业的进程ID(PID) 2.【实例】[root@10-222 ~]# more third.sh #!/bin/bash#parmecho "this is shellname: $0"echo "this is parm1 : $1"echo "this is parm2 : $2"echo "show parm number : $#"echo "show parm list : $*"echo "show parm list : $@"echo "show parm number : ${#*}"echo "show parm number : ${#@}"echo "show process id: $$"运行结果:[root@10-222 ~]# sh third.sh no1var no2varthis is shellname: third.shthis is parm1 : no1varthis is parm2 : no2varshow parm number : 2show parm list : no1var no2varshow parm list : no1var no2varshow parm number : 2show parm number : 2show process id: 23650[root@10-222 ~]# echo $_no2var3.$* 和 $@ 的区别$@ $* 只在被双引号包起来的时候才会有差异这部分是在网上看到的,原创已经不知道是哪位了。(这个例子很能说明)精确来讲,两者只有在 "" (双引号) 中才有差异,否则,都表示"全部参数"( $0 除外)。举例来说好了:sh my.sh p1 "p2 p3" p4 的话,不管是 $@ 还是 $* ,都可得到 p1 p2 p3 p4 就是了。但是,如果置于 "" (双引号)中的话:"$@" 则可得到 "p1" "p2 p3" "p4" 这三个不同的词段(word);"$*" 则可得到 "p1 p2 p3 p4" 这一整串单一的词段。我们可修改一下前面的 my.sh ,使之内容如下:代码:#!/bin/bashmy_fun() { echo "$#"}echo 'the number of parameter in "$@" is '$(my_fun "$@")echo 'the number of parameter in "$*" is '$(my_fun "$*")然后再执行 sh my.sh p1 "p2 p3" p4 就知道 $@ 与 $* 差在哪了 ... ^_^the number of parameter in "$@" is 3the number of parameter in "$*" is 1【$@ $* 的实例 说明】[root@10-222 ~]# cat a.txtaaaaaaa[root@10-222 ~]# cat b.txtbbbbbbb[root@10-222 ~]# cat c.sh#!/bin/shcat $1[root@10-222 ~]# cat *.txtaaaaaaabbbbbbb[root@10-222 ~]# sh c.sh *.txtaaaaaaa在c.sh中写了cat $1 为什么只显示一个文件中的内容, 但如果在命令行下cat *.txt就会显示2个文件信息将c.sh 改成 cat $@ 就正常了[root@10-222 ~]# vim c.sh#!/bin/shcat $@ #(改成$* 也是可以的)[root@10-222 ~]# sh c.sh *.txtaaaaaaabbbbbbb4.$?[root@10-222 ~]# echo `hostname`10-222[root@10-222 ~]# echo $?0[root@10-222 ~]# grep 'cpu cores' /proc/cpuinfo cpu cores : 1[root@10-222 ~]# echo $?0以下几个部分在后续内容介绍$? 在函数的返回值会在后续的章节说明以上是个人点点总结和理解,水平不高,文笔水平很烂,请各位大大见谅。可以一起交流学习。 我的QQ:610851588 可以加入我建的群(现在群人很少,希望慢慢多起来) Linux 群:183932302 Python ,shell 交流群:469094734