Я очень плохо знаком с сценариями оболочки.
Когда я смотрю на некоторый код, написанный для 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 .