Расширение параметра без двоеточия (значение по умолчанию для пустой строки) в условии - PullRequest
0 голосов
/ 02 мая 2018

Я знаю разницу между ${var:-word} и ${var-word}, но не вижу цели использования значения по умолчанию в в этом условии :

[ -z "${NVM_PROFILE-}" ]
  • Зачем там пустое значение по умолчанию?
  • Это связано с совместимостью с другими оболочками (zsh)?

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Если опция nounset включена с set -u или set -o nounset, [ -z "$NVM_PROFILE" ] приведет к ошибке, если NVM_PROFILE не установлен. Использование - или :- до явным образом расширяет unset-переменную до пустой строки, чтобы избежать этой ошибки.

Альтернативой использованию set -u является явная проверка, установлена ​​ли переменная. (Это работает в zsh и bash.)

[[ ! -v NVM_PROFILE || -z $NVM_PROFILE ]]
0 голосов
/ 02 мая 2018

Мне нравится 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
...