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または未設定の変数を処理する方法を決定します。