2

如果未设置变量,则使用${parameter:-word}参数扩展的形式评估为默认值时,引号的最佳做法是什么?

例如,假设一个带有-uset 的 Bash shell 脚本(在评估未定义或未设置的变量时生成错误),以测试变量是否具有值,编写等价物的最佳方法是if [[ -z "$FOO" ]]什么?

if [[ -z "${FOO:-}" ]]

或者

if [[ -z ${FOO:-""} ]]

或者是其他东西?

4

2 回答 2

6

如果您使用的是最新版本bash(撰写本文时为 4.2),您可以使用该-v选项来测试是否设置了变量,而无需尝试扩展它。

if [[ -v FOO ]]; then
    echo "FOO=$FOO"
else
    echo "FOO not set"
fi

如果您使用的是旧版本,我会使用

if [[ -z ${FOO:-} ]];

引号不是必需的,而且 IMO 这看起来最干净。

于 2014-04-30T22:52:07.810 回答
0

我喜欢这样做

if (( ! ${#FOO} ))

例子

于 2014-04-30T22:47:53.583 回答