${name-word}
と ${name:-word}
は両方変数 $name
にデフォルト値を設定するのに使います。 $name
が未定義の場合、両方とも word
を返します。
% echo ${null-foo} # $null は未定義だとする
foo
% echo ${null:-foo}
foo
違いは $name
が空文字列の場合 ${name:-word}
が word
を返す一方 ${name-word}
が空文字を返すことです。
% empty=''
% echo ${empty-foo}
% echo ${empty:-foo}
foo
似たものに ${name+word}
と ${name:+word}
があります。こちらは変数 $name
に値がある場合に、その値を上書きするものです。
% hoge=hoge
% echo ${hoge+foo}
foo
% echo ${hoge:+foo}
foo
違いは $name
が空文字列だった場合の挙動です。
% empty=''
% echo ${empty+foo}
foo
% echo ${empty:+foo}
$name
が未定義の場合は、両方空になります。
% echo ${null+foo}
% echo ${null:+foo}
参考
- zshexpn(1) PARAMETER EXPANSION