特殊的变量替换
${var}:同$var
${var:-value} var未设置或值为null,使用value值作为替换,否则使用var
${var:=value} 与${var:-value}一样,只是使用value的同时会赋值给var
unset var1 echo ${var1:="var1 nuset or null one "} echo ${var1:="var1 nuset or null two"} #输出one,因为var1已不为null,使用var1 echo ${var2:-"var2 nuset or null one "} echo ${var2:-"var2 nuset or null two "} #输出two,var仍为空
${var:+value} var未设置或为null,使用var(即使用null),否则使用value
${var:?value} 如果var被设置,使用var,否则,输出value作为错误信息,省略value输出默认错误信息(行号等),终止shell执行,并返回非0
出口状态,var值不变,可以用于检查参数
data=${1:?"no arg"} #执行时不带参数会终止下面的echo并显示value作为错误信息 echo $data
${#var} 字符串长度,是数字就是数字长度,${#array}是数组第一个元素的长度.例外情况:${#*}和${#@}是位置参数个数,${#array[*]}和
${#array[@]}是数组元素个数
${var#Pattern},${var##Pattern} 从$var变量值前面除去与给定模式匹配的最短或最长部分子串
${var%Pattern},${var%%Pattern} 从$var变量值后面除去与给定模式匹配的最短或最长部分子串,${var%Pattern}可用于抽取路径名的目录部分
var=file.c echo ${var%.c} #输出file