У чому різниця між “elif” і “else if” в сценарії оболонки?


4

Я дуже новачок у сценарії оболонки.

Коли я дивлюся на якийсь код, написаний для ksh ( #!/bin/ksh ) Я бачу, що є else if так само, як elif використовується в одному сценарії.

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


2
Що говорить перший рядок сценарію? Щось на зразок #!/bin/bash
Paul

У ньому написано #! / Bin / ksh
Zeena Pinto

Вкажіть оболонку у вашому питанні і з тегом . Є багато оболонок, і всі вони мають злегка (або радикально) інший синтаксис.
ghoti

1
Думаю, ви захочете редагувати і додати зразок коду. ksh підтримує if, else, і elif, але else if незвично.
Paul

Вкладання. else if починається інший рівень і більш складність. Хочете уникнути складності.
Henk Langeveld

Відповіді:


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 заяви. Plaese відзначає, що тут немає ніякого значення, якщо я пишу else if в одному рядку (як у вашому питанні) або в двох рядках (як у моєму прикладі).

Моя здогадка, чому обидві форми використовуються в одному сценарії: Якщо у вас вже є повний, якщо написано, але потрібно (логічні причини) копіювати / вирізати & amp; вставте це в існуючу статтю if, ви закінчите else if. Але коли ви пишете повний if-clause з нуля, ви, напевно, використовуєте IMHO простіше для читання форми elif.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.