$# 是传给脚本的参数个数$0 是脚本本身的名字$1 是传递给该shell脚本的第一个参数$2 是传递给该shell脚本的第二个参数$@ 是传给脚本的所有参数的列表$* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个$$ 是脚本运行的当前进程ID号$! 是最后运行的后台Process的PID$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误
脚本:
#!/bin/bash# args testecho "title: $0"echo "total args: $#"echo "first args: $1"echo "second args: $2"echo "all args: $@"echo "all args: $*"echo "currnet pid:$$"echo "status: $?"
结果:
[root src]# sh java18 1 2 3
title: java18total args: 3first args: 1second args: 2all args: 1 2 3all args: 1 2 3currnet pid:4005status: 0-----------------------------------------------------------------------------------------------------区别:"@"和 "*"
相同点:都是引用所有参数
不同点:只有在双引号中体现出来,假如脚本中运行时写入了三个参数(1 2 3)则 “*”等价于“123”(相当于传递了一个参数)而“@” 等价于传递了“1” “2” “3” (传递了三个参数)
3"
脚本:
#!/bin/bash# total args a=$#for((i=0;i<$a;i++))doecho "$i"doneecho "---- $ @----"for var in $@doecho "$var"doneecho "----$ *----"for va in $*doecho "$va"doneecho "---- " $ @ "----"for var1 in "$@"doecho "$var1"doneecho "---" "----"for va1 in "$*"doecho "$va1"done
运行结果:
[root src]# sh java19 1 2 3
012---- $ 123----$ *----123---- $ @ ----123--- ----1 2 3