条件中没有冒号(默认值为空字符串)的参数扩展

时间:2018-05-02 03:56:05

标签: bash zsh parameter-expansion

我知道${var:-word}${var-word}之间的区别,但我没有看到在this condition中使用默认值的目的:

[ -z "${NVM_PROFILE-}" ]
  • 为什么需要一个空的默认值?
  • 是否与其他shell(zsh)的兼容性有关?

2 个答案:

答案 0 :(得分:1)

我喜欢set -u

$ sh -c '[ -z "NVM_PROFILE" ] && echo empty'
empty
$ sh -c 'set -u; [ -z "$NVM_PROFILE" ] && echo empty'
sh: NVM_PROFILE: unbound variable
$ sh -c 'set -u; [ -z "${NVM_PROFILE-}" ] && echo empty'
empty

答案 1 :(得分:1)

如果使用nounsetset -u启用set -o nounset选项,[ -z "$NVM_PROFILE" ]如果NVM_PROFILE未设置则会导致错误。使用-:- 明确地将未设置的变量展开为空字符串可以避免该错误。

使用set -u的替代方法是明确检查变量是否已设置。 (这适用于zshbash。)

[[ ! -v NVM_PROFILE || -z $NVM_PROFILE ]]