条件中不带冒号的参数扩展(默认值为空字符串)
Parameter expansion without colon (default value to empty string) in a condition
我知道 ${var:-word}
和 ${var-word}
之间的区别,但我不明白在 this condition 中使用默认值的目的:
[ -z "${NVM_PROFILE-}" ]
- 为什么那里需要一个空的默认值?
- 是否与其他 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
或 set -o nounset
启用 nounset
选项,如果未设置 NVM_PROFILE
,[ -z "$NVM_PROFILE" ]
将导致错误。使用 -
或 :-
到 显式 将未设置变量扩展为空字符串可避免该错误。
使用 set -u
的替代方法是显式检查变量是否已设置。 (这适用于 zsh
和 bash
。)
[[ ! -v NVM_PROFILE || -z $NVM_PROFILE ]]
我知道 ${var:-word}
和 ${var-word}
之间的区别,但我不明白在 this condition 中使用默认值的目的:
[ -z "${NVM_PROFILE-}" ]
- 为什么那里需要一个空的默认值?
- 是否与其他 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
或 set -o nounset
启用 nounset
选项,如果未设置 NVM_PROFILE
,[ -z "$NVM_PROFILE" ]
将导致错误。使用 -
或 :-
到 显式 将未设置变量扩展为空字符串可避免该错误。
使用 set -u
的替代方法是显式检查变量是否已设置。 (这适用于 zsh
和 bash
。)
[[ ! -v NVM_PROFILE || -z $NVM_PROFILE ]]