この場合、Caseまたはifを使用する際の最大の違いは何ですか?

この場合、Caseまたはifを使用する際の最大の違いは何ですか?

私はifこの種のものをいつも使用していますが、まだそれについて考えたことはありませんが、次の簡単なことを教えてください。

case $1 in
test)
echo "test"
;;
test2)
echo "test"
;;
test3
echo "test3"
esac

そして

if [[ "$1" == "test" ]]
then
echo "test"
elif [[ "$1" == "test2" ]]
then
echo "test2"
elif [[ "$1" == "test3" ]]
then
echo "test3"
fi

この場合の最大の違いは何ですか?どちらかが客観的に他の仕事に適していますか?

答え1

case単一シェルの値を比較する言葉指定された数のシェルにモデル (もしあれば)関連シェルを実行します。リスト (もしあれば)最初の項目では一致が見つかりました。まったく一致しません。case評価する言葉そして、最初の一致が発生するまで、各関連パターンは正確に一度発生します。case実行されたシェルを返します。リストそれ以外の場合は0です。

if価値比較返品ステータス必要なシェルリスト0に設定したら、必要なthenシェルを実行します。リスト一致する場合、そうでない場合は選択肢elifまたはelseシェルを実行します。リスト (もしあれば)if1つ以上のシェルリターンを実行して評価します。リスト関連のあるsチェーンのifすべてのステートメントについてifリスト0を返します。

ifthen実行されたすべてまたはリストに対して返しelse、それ以外の場合は、必要なifシェルに関係なく 0 を返します。リスト返品。

答え2

あなたの例では、1つcaseの変数に対して複数のパターンがテストされます。変数の複数のモードを含むすべてのテストに使用できるものはいくつかありますが、これは一般的なものです。 $1
if ... elifif ... elif

関連情報