Bash 条件中不带冒号(默认值为空字符串)的参数扩展
我知道Bash 条件中不带冒号(默认值为空字符串)的参数扩展,bash,zsh,parameter-expansion,Bash,Zsh,Parameter Expansion,我知道${var:-word}和${var-word}之间的区别,但我看不出在以下情况下使用默认值的目的: 为什么这里需要一个空的默认值 它是否与其他shell(zsh)的兼容性有关 我喜欢set-u $ sh -c '[ -z "NVM_PROFILE" ] && echo empty' empty $ sh -c 'set -u; [ -z "$NVM_PROFILE" ] && echo empty' sh: NVM_PROFILE: unbound va
${var:-word}
和${var-word}
之间的区别,但我看不出在以下情况下使用默认值的目的:
- 为什么这里需要一个空的默认值
- 它是否与其他shell(zsh)的兼容性有关
- 我喜欢
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
我喜欢
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
如果使用
set-u
或set-o nounset
启用nounset
选项,[-z“$NVM\u PROFILE”]
如果未设置NVM\u PROFILE
,将导致错误。使用-
或:-
将未设置变量显式扩展为空字符串可以避免该错误
使用set-u
的替代方法是显式检查变量是否已设置。(这适用于zsh
和bash
)
如果使用
set-u
或set-o nounset
启用nounset
选项,[-z“$NVM\u PROFILE”]
如果未设置NVM\u PROFILE
,将导致错误。使用-
或:-
将未设置变量显式扩展为空字符串可以避免该错误
使用set-u
的替代方法是显式检查变量是否已设置。(这适用于zsh
和bash
)
那个代码对我来说毫无意义。如果测试成功,它将继续使用(可能未设置的)
${NVM_PROFILE}
。如果测试没有成功,它仍然在else
分支中使用${NVM\u PROFILE-}
,即使此时必须设置$NVM\u PROFILE
。该代码对我来说毫无意义。如果测试成功,它将继续使用(可能未设置的)${NVM_PROFILE}
。如果测试没有成功,它仍然在else
分支中使用${NVM\u PROFILE-}
,即使此时必须设置$NVM\u PROFILE
。
[[ ! -v NVM_PROFILE || -z $NVM_PROFILE ]]