私の単純なシェルピースはオリジナルと同じですか?

私の単純なシェルピースはオリジナルと同じですか?

私は毎年POSIXシェルコードをレビューしています。

私が一つ見つけたかもしれません。奇妙なライン、私は前にそれについてあまり知らなかった。

オリジナル

[ $# -eq 3 ] && exit_code=$3 || exit_code=1

新しいコード - より簡単になりました。

exit_code=${3:-1}

これら2つの方法はまったく同じ結果をもたらしますか?

どのような違いがあるかを詳しく説明できますか?

答え1

これら2つの方法は異なるロジックを使用するようです。

[ $# -eq 3 ] && exit_code=$3 || exit_code=1

これは、そして、もし、位置引数の数()は$#正確に3に等しく、exit_code変数は3番目の位置引数の値に等しく設定されます。それ以外の場合と同じに設定する必要があります1

exit_code=${3:-1}

これは、3番目の位置引数(または設定されていない場合)exit_codeの値に設定されます。1以上3つの位置パラメータ。


exit_code要約すると、位置パラメータの数が3つでない場合、最初のパラメータの数は1に設定され、2番目のパラメータの数は位置パラメータの数とは関係ありません。

関連情報