##
# 本文为《shell脚本专家指南》一书的学习笔记。
##
6. 测试变量和设置默认值
6.1. 设置默认值
设置变量默认值的几种形式,复杂程度递减。
#
if [ -z "$var" ]; then
var="default"
fi
#
[-z "$var" ] && var="default"
#
[ ! "$var" ] && var="default"
#
[ "$var" ] || var="default"
6.2. 变量替换
:= 句法
如果var已定义,且为非空值,则直接返回var的值。
否则为var赋值default,并且返回default。
var=""
echo ${var:="default"} # 输出default 。
echo $var # 输出default 。
= 句法
若var已定义,则直接返回var的值。
否则为var赋值default,并且返回default。
var=""
echo ${var="default"} # 输出空。
echo $var # 输出空。
unset var
echo ${var="default"} # 输出default 。
echo $var # 输出default。
:- 句法
如果var已定义,且为非空值,则直接返回var的值。
否则直接返回default,且不会为var赋值。
var=""
echo ${var:-"default"} # 输出 default 。
echo $var # 输出空。
- 句法
如果var已定义,则直接返回var的值。
否则直接返回default,且不会为var赋值。
var=""
echo ${var-"default"} # 输出空。
echo $var # 输出空。
unset var
echo ${var-"default"} # 输出default 。
echo $var # 输出空。
:? 句法
如果var已定义,且为非空值,则直接返回var的值。
否则脚本退出并返回行号和判断公式。 # 原文说会打印default,但是实际测试,会打印“var: default”。
var=""
echo ${var:?default} # 显示格式 脚本名 行号 判断语句。例:test.sh: line 3: var: default
? 句法
如果var已定义,则直接返回var的值。
否则脚本退出并返回行号和判断公式。
var=""
echo ${var?default} # 输出空。
unset var
echo ${var?default} # 脚本退出,打印行号。
:+ 句法
当var未定义,或var为空值时,直接返回var的值。
否则返回default,且不会为var赋值。
var="var"
echo ${var:+"default"} # 输出default。
var=""
echo ${var:+"default"} # 输出空。
+ 句法
当var未定义时,直接返回var的值。
否则返回default,且不会为var赋值。
var="var"
echo ${var+"default"} # 输出var。
unset var
echo ${var+"default"} # 输出default。
上述句法的区别和用法小结。
: 句法,主要用于判断变量是否为空变量,如果变量为非空,则返回变量的值。
= 和 - 句法,两者的返回值一致,区别在于 = 会为变量赋值,而 - 不会。
- 和 + 句法,两者判断互为反转,- 返回值和 + 返回值互相颠倒。
= 句法,可以用来做变量赋值操作。
+ - 句法,可以在脚本中组合,来做变量的判定和定义工作。
? 句法,可以用来做变量的判断,并且可以输出错误信息。