$$ Shell本身的PID(ProcessID)
$! Shell最后运行的后台Process的PID
$? 最后运行的命令的结束代码(返回值)
$- 使用Set命令设定的Flag一览
$* 所有参数列表,即参数的全部内容。显示为 "$1 $2 … $n"
$@ 所有参数列表,即参数的全部内容。代表"$1" 、"$2"、 … 、"$n"之意,每个变量都是独立的(用双引号括起来)
$# 添加到Shell的参数个数
$0 Shell本身的文件名
$1~$n 添加到Shell的各参数值。$1是第1参数、$2是第2参数…
总结:
对于echo来说:$* $@ "$*" "$@"是一样的,都是:"$1 $2 $3 $4"
对于printf来说:$* $@ "$@"是一样的,都是:"$1" "$2" "$3" "$4"
"$*"是:"$1 $2 $3 $4"
示例:
1 #!/bin/bash
2 #
3 printf "The complete list is %s\n" "$$"
4 printf "The complete list is %s\n" "$!"
5 printf "The complete list is %s\n" "$?"
6 printf "The complete list is %s\n" "$*"
7 printf "The complete list is %s\n" "$@"
8 printf "The complete list is %s\n" $*
9 printf "The complete list is %s\n" $@
8 printf "The complete list is %s\n" "$#"
9 printf "The complete list is %s\n" "$0"
10 printf "The complete list is %s\n" "$1"
11 printf "The complete list is %s\n" "$2"
结果:
[Aric@localhost ~]$ bash params.sh 123456 QQ
The complete list is 24249 //"$$"
The complete list is //"$!"
The complete list is 0 //"$?"
The complete list is 123456 QQ //"$*"
The complete list is 123456 //"$@"
The complete list is QQ //"$@" 这两行都是"$@"的结果
The complete list is 123456 //$*
The complete list is QQ //$* 这两行都是$*的结果
The complete list is 123456 //$@
The complete list is QQ //$@ 这两行都是$@的结果
The complete list is 2
The complete list is params.sh
The complete list is 123456
The complete list is QQ
总结:
即:对于echo来说:$* $@ "$*" "$@"是一样的,都是:"$1 $2 $3 $4"
对于printf来说:$* $@ "$@"是一样的,都是:"$1" "$2" "$3" "$4"
"$*"是:"$1 $2 $3 $4"