参考自网道
Bash 提供四个特殊语法,跟变量的默认值有关,目的是保证变量不为空。
- 如果变量为空则返回默认值,否则返回变量本来的值
${varname:-defaultval}
上面语法的含义是,如果变量varname
存在且不为空,则返回它的值,否则返回defaultval
。它的目的是返回一个默认值,比如${count:-0}表示变量count不存在时返回0。
类似的写法是:
if [ -n "$varname" ]; then
echo $varname
else
echo "defaultval"
fi
- 如果变量为空则返回并设置默认值,否则返回变量原来的值
${varname:=defaultval}
上面语法的含义是,如果变量varname
存在且不为空,则返回它的值,否则返回defaultval
,并且将它设为defaultval
。它的目的是设置变量的默认值,比如${count:=0}表示变量count不存在时返回0,且将count设为0。和上面那条扩展不同是,会给变量varname
做赋值操作。
类似写法是:
if [ -n "$varname" ]; then
echo $varname
else
varname="defaultval"
echo "defaultval"
fi
- 如果变量非空返回指定的值,否则返回空
${varname:+word}
上面语法的含义是,如果变量名存在且不为空,则返回word
,否则返回空值。它的目的是测试变量是否存在,比如${count:+1}表示变量count存在时返回1(表示true),否则返回空值。
类似的写法是:
if [ -z "$varname" ]; then
echo $varname
else
echo "defaultval"
fi
- 变量为空则打印指定信息,并退出脚本执行
${varname:?message}
上面语法的含义是,如果变量varname
存在且不为空,则返回它的值,否则打印出varname: message
,并中断脚本的执行。如果省略了message,则输出默认的信息“parameter null or not set.”。它的目的是防止变量未定义,比如${count:?"undefined!"}表示变量count未定义时就中断执行,抛出错误,返回给定的报错信息undefined!。