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

20845
Zeena Pinto

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

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

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

4
Что говорит первая строка сценария? Что-то вроде `#! / Bin / bash` Paul 9 лет назад 2
Там написано #! / Bin / ksh Zeena Pinto 9 лет назад 0
Пожалуйста, укажите оболочку ** в вашем вопросе ** и ** с тегом **. Существует много оболочек, и все они имеют слегка (или радикально) различный синтаксис. ghoti 9 лет назад 0
Я думаю, вы захотите [отредактировать] и добавить пример кода. ksh поддерживает `if`,` else` и `elif`, но` else if` является необычным. Paul 9 лет назад 1
Верстка. `else if` запускает другой уровень и более сложную. Вы хотите избежать сложности. Henk Langeveld 9 лет назад 0
Хорошо. Спасибо за это предложение Zeena Pinto 9 лет назад 0

1 ответ на вопрос

5
mpy

Я пытаюсь ответить в одном предложении: если вы используете, 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.

Похожие вопросы