如果变量为空或未设置,则会出错

此语义类似于默认值替换的语义,但它不是替换默认值,而是使用提供的错误消息进行错误输出。形式是 ${VARNAME?ERRMSG}${VARNAME:?ERRMSG}。与:的形式将我们的错误如果变量为取消设置,而没有表单将唯一的错误出如果变量未设置。如果抛出错误,则输出 ERRMSG 并将退出代码设置为 1

#!/bin/bash
FOO=
# ./script.sh: line 4: FOO: EMPTY
echo "FOO is ${FOO:?EMPTY}"
# FOO is 
echo "FOO is ${FOO?UNSET}"
# ./script.sh: line 8: BAR: EMPTY
echo "BAR is ${BAR:?EMPTY}"
# ./script.sh: line 10: BAR: UNSET
echo "BAR is ${BAR?UNSET}"

每个错误的 echo 语句上面的完整示例运行需要被注释掉以继续。