私は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
シェルを実行します。リスト (もしあれば)。if
1つ以上のシェルリターンを実行して評価します。リスト関連のあるsチェーンのif
すべてのステートメントについてif
リスト0を返します。
if
then
実行されたすべてまたはリストに対して返しelse
、それ以外の場合は、必要なif
シェルに関係なく 0 を返します。リスト返品。
答え2
あなたの例では、1つcase
の変数に対して複数のパターンがテストされます。変数の複数のモードを含むすべてのテストに使用できるものはいくつかありますが、これは一般的なものです。 $1
if ... elif
if ... elif