web-dev-qa-db-ja.com

シェルスクリプトの「Elif」と「else if」の違いは何ですか?

シェルスクリプトは初めてです。

ksh#!/bin/ksh)と書かれたコードを見ると、1つのスクリプトでelse ifElifが使用されていることがわかります。

では、シェルスクリプトでのelse ifElifの違いは何ですか。

5
Zeena Pinto

私は1つの文で答えを試します:Elifを使用する場合、1つのif節を扱います。_else if_を2つのif節

次の簡単な例を見てください。

_testone() {
  if [[ $CASE == 1 ]]; then
    echo Case 1.
  Elif [[ $CASE == 2 ]]; then
    echo Case 2.
  else 
    echo Unknown case.
  fi
}
_

各ケースが同じ階層レベルにあることがわかるように、これは正式に(整然としたインデントが意味をなす場合があります)1つのif節です。

ここで、_else if_を使用した同じ関数:

_testtwo() {
  if [[ $CASE == 1 ]]; then
    echo Case 1.
  else
    if [[ $CASE == 2 ]]; then
      echo Case 2.
    else 
      echo Unknown case.
    fi
  fi
}
_

正式に2つのカスケードされたif節があり、それに応じて2つの終了fiステートメントがあります。プレーズは、私が_else if_を1行(質問のように)または2行(私の例のように)で書き込んでも、ここでは違いがないことに注意してください。

両方のフォームが同じスクリプトで使用される理由は私の推測:すでに完全なif節が記述されているが、それを既存のif節にコピー/カットアンドペーストする必要がある(論理的な理由)場合、最終的に_else if_。しかし、完全なif節を最初から作成する場合は、おそらくIMHOの読みやすい形式Elifを使用します。

5
mpy