パラメータの置換

パラメータの置換

Linuxでは、次の2つのパラメータ置換オプションの違いを知りたいです。

echo ${MESG:? "HI"}
echo ${MESG:- "HI"}

彼らはみんな同じことをしているようです。

答え1

bashマニュアルから(POSIX規格同様のフレーズがあります):

${parameter:-word}:デフォルト値の使用。設定されていないか null の場合、parameter置き換える拡張子です。それ以外の場合、word値は置き換えられます。parameter

${parameter:?word}:空または設定されていない場合のエラー表示。 nullまたは設定されていない場合、parameter拡張word(または存在しない場合はメッセージword)が標準エラーに書き込まれ、シェル(対話型でない場合)が終了します。それ以外の場合、parameter 値は置き換えられます。

変数が空でない文字列の場合は、MESG同じことを行います(変数の値に展開MESG)。空またはまったく設定されていない場合は、${MESG:-HI}文字列に置き換えられ、標準エラーが表示され、HI現在のシェルセッションを終了します(対話式セッションではない場合)。${MESG:?HI}HI

答え2

MESGが設定されていない場合

echo ${MESG:?}

印刷されます

MESG: parameter null or not set


echo ${MESG:-}

印刷されます

<empty string>

これ? - したがって、nullまたは未設定の変数を処理する方法を決定します。

関連情報