当使用“set -o nounset”时,如何测试变量是否设置而不是空

时间:2017-11-22 14:43:18

标签: bash shell

是的,这里有一个类似的主题:Test if a variable is set in bash when using "set -o nounset"

然而,有许多不同的答案,并不是特别清楚。

以下是否足以测试变量是否设置且不为空?

#!/bin/bash 
set -o nounset

if [[ ! -z "${EXAMPLE-}" ]]; then
    echo "Variable is defined and is not empty..."
fi

2 个答案:

答案 0 :(得分:4)

[[ ! -z "${EXAMPLE-}" ]]可以安全地确定名为EXAMPLE的变量是否已分配非空值,即使set -u处于有效状态。

就我个人而言,我会写[[ -n "${EXAMPLE-}" ]]甚至是[[ ${EXAMPLE-} ]] - 利用[[ ]]安全的额外简洁而[ ]不值得信赖 - 但所有这些都是正确的。

答案 1 :(得分:2)

您可以使用-v运算符检查名称是否已设置为值:

if [[ -v EXAMPLE ]]; then
    echo "Safe to expand: $EXAMPLE"
fi