使用引号"$ {parameter:-word}"参数扩展

jet*_*set 2 bash shell quotes variable-expansion

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

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

if [[ -z "${FOO:-}" ]]
Run Code Online (Sandbox Code Playgroud)

要么

if [[ -z ${FOO:-""} ]]
Run Code Online (Sandbox Code Playgroud)

或者是其他东西?

che*_*ner 6

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

if [[ -v FOO ]]; then
    echo "FOO=$FOO"
else
    echo "FOO not set"
fi
Run Code Online (Sandbox Code Playgroud)

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

if [[ -z ${FOO:-} ]];
Run Code Online (Sandbox Code Playgroud)

报价不是必需的,IMO看起来最干净.