Answers:
这绝对是POSIX语法。释义:
使用${parameter-word},如果parameter是
parameter,word。会话示例:
$ echo "${parameter-word}"
word
$ parameter=
$ echo "${parameter-word}"
$ parameter=value
$ echo "${parameter-word}"
value
“ Null”在这里仅表示空字符串。例如,与SQL相比,POSIX Shell中没有特殊的null值。
这也记录在的“参数扩展”部分man bash。
zsh我所知道的唯一一个外壳明确地提到了无冒号的变体,而不仅仅是记下省略冒号是什么。
变量扩展${parameter:-word}将使用$parameterif 的值(如果已设置)且为非null(非空字符串),否则将使用string word。
省略:will不会测试该值是否为空,只会测试它是否未设置。
这意味着${PS1-}它将被扩展为设置的值$PS1,但是将扩展为空字符串(如果为空或未设置)。在这种情况下,这是完全一样的${PS1:-}作为后弦-也为空。
就像@Rakesh Sharma指出的那样,"${PS1-}"和之间的区别"$PS1"很细微:两者都将扩展为的值$PS1,或者如果未设置则扩展为空字符串。例外是when set -u处于活动状态,在这种情况下,扩展未设置的变量将导致error。通过设置的(空)默认值"${PS1-}"可以避免这种情况,将unset扩展PS1为空字符串而不会出现错误。
这是标准语法(起源于70年代后期的Bourne shell)以及其他一些类似的扩展。
"$PS1",因为如果PS1为空,则为空,并且引号可以防止单词完全消失。
${parameter:-word}将使用$parameter它的值。在其他所有情况下(意味着:设置但为NULL或未设置),它将使用word。您的措辞:if its set or null
语法:
${parameter:-word}
和一种特殊形式:
${parameter-word}
是POSIX shell中的有效语法,表示word如果parameter未设置或为null ,则使用默认值。
通常,with word为空,则:
${parameter-}
和:
$parameter
要么:
${parameter}
是等效的。
但是在的影响下set -u,所有未设置的变量都会导致外壳终止。${parameter-}用于绕过该严格规则。在两种情况下都可以使用,是的,这是更正确的方法。