4

Я очень плохо знаком с сценариями оболочки.

Когда я смотрю на некоторый код, написанный для ksh (#!/bin/ksh) Я вижу, что есть что- else if использовать elif в одном скрипте.

Итак, в чем разница между else if и elif в сценариях оболочки?

1 ответ1

5

Я пытаюсь ответить в одном предложении: если вы используете elif вы имеете дело с одним предложением if, если вы используете else if с двумя предложениями if.

Посмотрите на эти простые примеры:

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

Это формально (аккуратный отступ иногда имеет смысл) одним условием 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
}

Формально у вас есть два каскадных if-предложения и, соответственно, два закрывающих оператора fi . Обратите внимание, что здесь нет никакой разницы, если я напишу else if в одну строку (как в вашем вопросе) или в две строки (как в моем примере).

Я догадываюсь, почему обе формы используются в одном и том же сценарии: если у вас уже написано полное условие if, но вам нужно (логические причины) скопировать / вырезать и вставить его в существующее предложение if, вы в конечном итоге получите else if Но когда вы пишете полное выражение if с нуля, вы, вероятно, используете упрощенную для чтения форму IMHO elif .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .