Shell $? $* $@ 等含义

$0 ------>脚本名

$1 ------>传入的第一个参数值

$? ------>脚本执行的结果。成功==0,不成功==非0

$* ------>所有参数的内容

$@ ------>所有参数的内容

$# ------>参数的数量

$$ ------>表示当前进程的进程号 希望打开一个进程后不再打开另一个

$! ------>表示后台运行的最后一个进程号

测试代码如下:

 1 linux-56:/install # cat 2.sh 
 2 #!/bin/sh
 3 echo '$0 == ' $0
 4 echo '$1 == ' $1
 5 echo '$2 == ' $2
 6 echo '$? == ' $?
 7 echo '$* == ' $*
 8 echo '$@ == ' $@
 9 echo '$# == ' $#
10 echo '$$ == ' $$
11 echo '$! == ' $!
12 
13 ps -ef | grep "2.sh"

测试结果打印如下:

 1 linux-56:/install # ./2.sh 1 2 3
 2 $0 ==  ./2.sh
 3 $1 ==  1
 4 $2 ==  2
 5 $? ==  0
 6 $* ==  1 2 3
 7 $@ ==  1 2 3
 8 $# ==  3
 9 $$ ==  16169
10 $! == 
11 root     16169   307  0 18:29 pts/0    00:00:00 /bin/sh ./2.sh 1 2 3
12 root     16171 16169  0 18:29 pts/0    00:00:00 grep 2.sh

参考了下别的资料,显示的是说 $* 和 $@ 的区别在于:

$*为"1 2 3"(一起被引号包住)
$@为"1" "2" "3"(分别被包住)
即$@可以当作数组来用
注:没实际使用过。待验证。

突然看到一个很详细的blog:
http://c.biancheng.net/cpp/view/2739.html
原文地址:https://www.cnblogs.com/AndyStudy/p/6064813.html