分享下bash参数与参数扩展的相关知识。
1,传递参数
$0,$1,$2.......$N :都是位置参数,其中$0可以表示为脚本名称(若在函数中调用则表示函数名称)。
$* 和 $@ : 都表示除$0外的所有参数,两者在不用双引号包含时是1、一样的,也就是$*和$@是等价的,使用在双引号中扩展则不同,$*表示所有参数都作为1个单词,且受IFS特殊变量的影响(即所有参数由IFS进行分割连接),而$@把
每个参数都扩展为1个单词即"$@"等价于"$1" "$2" ..."$N".
$# :表示参数数量(不含$0)
注:shell 脚本处理参数的方式与函数处理参数的方式相同。
2,获取参数的子集(子字符串)
一般形式: ${参数名称:开始位置:长度}
注:开始位置和长度为整数,且从0开始
实例:
3,获取变量值的长度
一般形式:${#变量名称}
实例:
4,模式匹配(可以使用通配符)
[1].从左开始删除:
${变量名#要删除的字} #表示从左边开始删除最短的匹配要删除的字
${变量名##要删除的字} #表示从左边开始删除最长的匹配要删除的字
实例:
[2].从右开始删除
${变量名%要删除的字} #表示从右边开始删除最短的匹配要删除的字
${变量名%%要删除的字} #表示从右边开始删除最长的匹配要删除的字
实例:
[3].替换字符
${变量名/要替换的字/新字} #将变量值中指定的字替换为新字,只做1次替换
${变量名//要替换的字/新字} #将变量值中指定的字替换为新字,做所有替换
实例:
5,设置默认值
${变量名:-默认值} 若指定的变量为空或者没有设置,则shell扩展默认值并替换结果,但是指定变量名的值没有更改。
示例:
${变量名:+默认值} 若指定的变量值设置且不为空则shell扩展默认值并替换结果,但是指定的变量值没有改变。
示例:
${变量名:=默认值} 若指定的变量为空或者没有设置,则shell扩展默认值并替换结果,且指定变量名的值也更改为默认值。
实例:
${变量名:?默认值} 若指定的变量为空或者没有设置,则shell扩展默认值并将结果写入标准错误中。可用于判断变量b是否为空,若为空则错误输出指定的信息。
实例: