变量 含义
$0 当前脚本的文件名
$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$# 传递给脚本或函数的参数个数。
$* 传递给脚本或函数的所有参数。
$@ 传递给脚本或函数的所有参数。 被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。
$? 上个命令的退出状态,或函数的返回值。
$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。
$0 当前脚本的文件名
$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$# 传递给脚本或函数的参数个数。
$* 传递给脚本或函数的所有参数。
$@ 传递给脚本或函数的所有参数。 被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。
$? 上个命令的退出状态,或函数的返回值。
$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。
#!/bin/bash
#. a.sh #sh/bash file.sh (ubuntu中sh指向dash,可以用ls -l /bin/sh来查看),该file.sh可以无“执行权限”
#source a.sh #source和.等价,在当前bash环境下读取并执行file.sh中的命令,该file.sh可以无“执行权限”
#./file.sh 该file.sh需要“执行权限”(chmod +x file.sh)
out(){
echo "File name:$0"
echo "First Parameter:$1"
echo "Second Parameter:$2"
echo "Quoted Values:$@"
echo "Quoted Values:$*"
echo "Total Number of Parameters:$#"
echo "print each param from \$*"
for var in $*
do
echo "$var"
done
echo "print each param from \$@"
for var in $@
do
echo "$var"
done
}
echo "————————执行out函数,参数为文件参数$3,$1,$2,$0————————"
out $3 $1 $2 $0 #空格对参数进行分割
echo "————————sh文件中的语句————————————"
echo "File name:$0"
echo "First Parameter:$1"
echo "Second Parameter:$2"
echo "Quoted Values:$@"
echo "\"\$@\"=""$@"
echo "Quoted Values:$*"
echo "\"\$*\"=""$*"
echo "Total Number of Parameters:$#"
echo "print each param from \$*"
for var in $*
do
echo "$var"
done
echo "print each param from \"\$*\""
for var in "$*"
do
echo "$var"
done
echo "print each param from \$@"
for var in $@
do
echo "$var"
done
echo "print each param from \"\$@\""
for var in "$*"
do
echo "$var"
done
输出结果
hyc@hyc-csu:~/shellCommands$ bash b.sh 3 6 9
————————执行out函数,参数为文件参数9,3,6,b.sh————————
File name:b.sh
First Parameter:9
Second Parameter:3
Quoted Values:9 3 6 b.sh
Quoted Values:9 3 6 b.sh
Total Number of Parameters:4
print each param from $*
9
3
6
b.sh
print each param from $@
9
3
6
b.sh
————————sh文件中的语句————————————
File name:b.sh
First Parameter:3
Second Parameter:6
Quoted Values:3 6 9
"$@"=3 6 9
Quoted Values:3 6 9
"$*"=3 6 9
Total Number of Parameters:3
print each param from $*
3
6
9
print each param from "$*"
3 6 9
print each param from $@
3
6
9
print each param from "$@"
3 6 9