Shell 特殊的变量替换

时间:2022-09-21 15:38:34

特殊的变量替换
${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