Крапка з комою в умовних структурах


35

Навіщо ставити крапки з комою в одному, а не в іншому?

Результат такий же

Код перший

if [ "a" == "a" ]
then
 echo "true"
fi

Код другий

if [ "a" == "a" ];
then
 echo "true";
fi

Точки з комою у другому коді непотрібні?

Коли потрібно розмістити крапки з комою?


2
На це було достатньо і правильно відповідено, але я хотів, щоб ОП це також знало; просто замінює будь - який кінець рядка, тому ви можете об'єднати дві команди в один рядок, наприклад:svn up; make
Аарон Д. Мараско

1
Зауважимо також, що два напівколонки ;;використовуються для розділення матчів у виписках про справи. ;;тут потрібно, не обов'язково .... але ;;це не те саме, що ;або ; ;, просто схоже на це. Одиничні напівколонки ;працюють як звичайно в частинах тверджень про справу COMMANDS.
cas

Відповіді:


31

Точка з комою потрібна лише тоді, коли відсутній кінець рядка:

if [ "a" == "a" ] ; then echo "true" ; fi

Без крапки з комою ви отримуєте синтаксичну помилку.

Я не розумію вашого запитання про цитати. Чи можете ви бути більш конкретними?

(До речі, використання =замість цього ==є більш портативним та сумісним з POSIX).


Цитати у другому коді непотрібні?
Джонатан

2
Усі цитати в обох зразках зайві.
choroba

6

Точка з комою часто використовується, тому що деяким людям (/ мені наприклад) подобається такий стиль:

if [ ... ]; then
   doit-it-then
else
   doit-it-else
fi

Отже, якщо ключове слово тоді розміщується на рядку умови, то це необхідно, тому що починається нова команда, як написано choroba.

Щодо лапок у перевірці стану, вони часто використовуються зі змінними, щоб переконатися, що виняток не відбувається, якщо змінній нічого не призначено. Це більш безпечний стиль і виглядає непотрібним, але навіть у програмуванні оболонок він час від часу робив програму процесом, хоча вміст не можна було призначити змінним. Потім команда все ще працює, оскільки порівнюється порожній рядок.

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