bash – ${var}和${var-}之间有什么区别

前端之家收集整理的这篇文章主要介绍了bash – ${var}和${var-}之间有什么区别前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经看到一些 shell脚本使用这个变量引用表示法,我只是找不到任何信息.

就我的测试而言,它显然是一样的.

有线索吗?

$uno=1
$if [ -n "${uno}" ]; then echo yay\! ; fi
yay!
$if [ -n "${uno-}" ]; then echo yay\! ; fi
yay!
${uno-}是在未设置参数uno的情况下提供默认值的示例.

如果uno未设置,我们得到 – 后面的字符串:

$unset uno
$echo ${uno-something}
something

如果uno只是空字符串,则返回uno的值:

$uno=""
$echo ${uno-something}

$

如果uno具有非空值,当然,则返回该值:

$uno=Yes
$echo ${uno-something}
Yes

为什么要使用${variable-}?

当脚本的正确操作很重要时,脚本编写者通常使用set -u,它会在使用unset变量时生成错误消息.例如:

$set -u
$unset uno
$echo ${uno}
bash: uno: unbound variable

要处理可能要禁止此消息的特殊情况,可以使用尾随 – :

$echo ${uno-}

$

[信用发现OP的full code使用了-u及其对这个问题的重要性归于Benjamin W.]

文档

来自man bash

When not performing substring expansion,using the forms documented
below (e.g.,:-),bash tests for a parameter that is unset or null.
Omitting the colon results in a test only for a parameter that is
unset.

${parameter:-word}
Use Default Values. If parameter is unset or null,the expansion of word is substituted. Otherwise,the value of parameter is substituted. [emphasis added]

猜你在找的Bash相关文章