Я очень плохо знаком с сценариями оболочки.
Когда я смотрю на некоторый код, написанный для ksh (#!/bin/ksh
) Я вижу, что есть что- else if
использовать elif
в одном скрипте.
Итак, в чем разница между else if
и elif
в сценариях оболочки?
Я пытаюсь ответить в одном предложении: если вы используете 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
.