回答:
これは間違いなくPOSIX構文です。言い換え:
を使用${parameter-word}
する場合parameter
、
parameter
、word
ます。セッションの例:
$ echo "${parameter-word}"
word
$ parameter=
$ echo "${parameter-word}"
$ parameter=value
$ echo "${parameter-word}"
value
ここでの「ヌル」とは、単に空の文字列を意味します。たとえば、SQLとは対照的に、POSIXシェルには特別なnull値はありません。
これは、「パラメータ拡張」セクションにも記載されていman bash
ます。
zsh
私が知っている唯一のシェルは、コロンを省略したことを単にメモするのではなく、コロンなしのバリアントを明示的に言及しています。
変数展開で${parameter:-word}
は、値が$parameter
設定されている場合はnull以外の値(空の文字列ではない)が使用され、そうでない場合はstringが使用されますword
。
を省略する:
と、値が空であるかどうかはテストされず、設定されていないかどうかのみがテストされます。
これは、設定されている場合${PS1-}
は値に展開されますが$PS1
、空または未設定の場合は空の文字列に展開されます。この場合、これはまったく同じように${PS1:-}
後に文字列として-
も空です。
@Rakesh Sharmaが指摘しているように、"${PS1-}"
との違い"$PS1"
は微妙です。両方ともの値に展開される$PS1
か、設定されていない場合は空の文字列に展開されます。例外はwhen set -u
がアクティブな場合です。この場合、未設定の変数を展開するとエラーが発生します。によって設定される(空の)デフォルト値は"${PS1-}"
これを回避し、unset PS1
をエラーなしで空の文字列に展開します。
これは標準的な構文です(70年代後半にBourneシェルで作成されました)。他のいくつかの同様の拡張も同様です。
"$PS1"
ので、if PS1
と同じです。ifが空の場合は空であり、引用符は単語が完全に消えないようにします。
${parameter:-word}
の値を使用することに注意してください$parameter
。他のすべての場合(意味:設定されているがNULLまたは未設定のいずれか)を使用しますword
。あなたの言い回し:if its set or null
構文:
${parameter:-word}
そして特別な形式:
${parameter-word}
はPOSIXシェルの有効な構文でありword
、parameter
が未設定またはヌルの場合にデフォルト値を使用することを意味します。
通常、with word
は空の場合:
${parameter-}
そして:
$parameter
または:
${parameter}
同等です。
ただし、の効果によりset -u
、設定されていない変数はすべてシェルを終了させます。${parameter-}
その厳格なルールをバイパスするために使用されます。どちらの場合でも動作するので、はい、より正確な方法です。