私は最初にシェルスクリプトに触れ、次の表現に触れました。
${var:-val}
そして${var-val}
${var:+val}
そして${var+val}
${var:=val}
そして${var=val}
それでは、彼らはどのように評価され、違いは何ですか?
答え1
以下は、さまざまな種類のパラメータ拡張と代替方法です。
${var:-val}
val
var
設定されていないかnullの場合は、「デフォルト」${var}
に置き換えられます。val
${var:=val}
まず、ifが設定されていないか、nullval
に割り当てられてから(すべての場合)。に置き換えられます。var
var
${var}
${var:+val}
に置き換えられます何もないvar
設定されていないか null の場合、val
そうでない場合。
省略すると、:
これらすべての定義から「またはnull」部分が削除されます。
すべてそこにいるbash(1)
マンページとPOSIX。
いくつかの例が役に立ちます。
unset a
echo "${a:-default}"
default
などを生成しますecho "${a-default}"
。
a=
echo "${a:-default}"
再生成がdefault
空白echo "${a-default}"
行を出力します。
a=test
echo "${a:-default}"
test
などを生成しますecho "${a-default}"
。
unset a
echo "${a:=default}"
が生産されdefault
ました(で確認)。a
default
echo "${a}"
この+
形式は奇妙に思えるかもしれませんが、いくつかのステップで変数を設定するのに役立ちます。
PATH="${PATH}${PATH:+:}/blah/bin"
空でない場合にのみ前に追加されます:
。これは、で始まるパスを防ぎます。/blah/bin
PATH
: