#@TOC
第一: 符号汇总
符号 | 含义 |
---|---|
$$ | 进程的ID |
$? | 脚本执行的状态码,0:正常;非0:错误 |
$# | 脚本执行时,传入参数的个数 |
$0 | 执行脚本的名称 |
$1/2/3… | 脚本执行时,传入的第1/2/3/…个参数值 |
$* | 脚本执行时,传入参数的列表 |
$@ | 脚本执行时,传入参数的所有个数 |
第二: 使用说明
$$ $# $? $0 $1 $2符号的使用和实例
test.sh脚本内容如下:
#!/usr/bin/bash
while getopts "i:o:t:" arg
do
case $arg in
i)
input="$OPTARG";;
o)
output="$OPTARG";;
t)
t="$OPTARG";;
?)
exit 1 ;;
esac
done
echo -e "参数值:"
echo -e "\tinput = $input"
echo -e "\toutput = $output"
echo -e "\tt = $t"
echo -e "=============="
echo -e "\$$ is $$"
echo -e "\$# $#"
echo -e "\$0 is $0"
echo -e "\$1 is $1"
echo -e "\$2 is $2"
echo -e "\$? is $?"
# 执行如下命令:
sh test.sh -i input.txt -o output.txt -t 10
# 结果为:
# 参数值:
# input = input.txt
# output = output.txt
# t = 10
# ==============
# $$ is 42038
# $# 6
# $0 is test.sh
# $1 is -i
# $2 is input.txt
# $? is 0
$*的使用实例
注:$* 会将命令行的所有参数(不包含$0)看成一个整体,是一个列表;
test1.sh内容如下:
#!/usr/bin/bash
echo "\$* 的使用"
echo -e "\$* is $*"
for i in "$*";do echo $i;done
for i in $*;do echo $i;done
# 执行如下命令:
sh test1.sh a b c
# 结果为:
# $* 的使用
# $* is a b c
# a b c
# a
# b
# c
$@的使用实例
注:$@ 会将命令行的所有参数(不包含$0)区分来看待;
test1.sh内容如下:
#!/usr/bin/bash
echo "\$@ 的使用"
echo -e "\$@ is $*"
for i in "$@";do echo $i;done
for i in $@;do echo $i;done
# 执行如下命令:
sh test2.sh a b c
# 结果为:
# $@ 的使用
# $@ is a b c
# a
# b
# c
# a
# b
# c
第三:$*和$@的区别
- 都是用来获取所有脚本参数的特殊变量;
- $* 会把所有的参数解释成一个单词(单个字符串),即每个参数之间不会加上空格,全部组合成一个字符串,用IFS(默认是空格)分隔。所以,将*放在双引号里,预处理$符号,保持长字符串的完整性;
- $@会把所有的参数看成是独立的单词(多个独立的字符串),即每个参数之间加上空格,将每个参数作为一个独立的字符串处理;