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}
将使用$parameter
if 的值(如果已设置)且为非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-}
用于绕过该严格规则。在两种情况下都可以使用,是的,这是更正确的方法。