Точка с запятой в условных структурах

35

Зачем ставить точку с запятой в одном, а не в другом?

Результат тот же

Код один

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

Код два

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

Точки с запятой во втором коде не нужны?

Когда необходимо ставить точку с запятой?

Jhonathan
источник
2
На этот вопрос было достаточно и правильно дан ответ, но я хотел, чтобы ФП также знал об этом; просто заменяет любой конец строки, так что вы можете объединить две команды в одну строку, например:svn up; make
Аарон Д. Мараско
1
Также обратите внимание, что две точки с запятой ;;используются для разделения совпадений в операторах case. ;;здесь требуется, не обязательно .... но ;;это не то же самое, что ;или ; ;, просто выглядит немного так. Одиночные точки с запятой ;работают как обычно в частях КОМАНД регистров.
Cas

Ответы:

31

Точка с запятой нужна только в случае отсутствия конца строки:

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

Без точек с запятой вы получаете синтаксическую ошибку.

Я не понимаю ваш вопрос о кавычках. Можете быть более конкретными?

(И, между прочим, использование =вместо ==более портативного и POSIX-совместимого).

choroba
источник
Цитаты во втором коде не нужны?
Джонатан
2
Все цитаты в обоих примерах не нужны.
Чороба
6

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

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

Таким образом, если ключевое слово then помещено в строку условия, это необходимо, потому что начинается новая команда, написанная choroba.

Что касается кавычек в проверке условий, они часто используются с переменными, чтобы удостовериться, что исключение не происходит, если переменная не присвоена. Это более безопасный стиль и выглядит ненужным, но даже в программировании оболочки он время от времени заставляет программы работать, хотя содержимое не может быть присвоено переменным. Тогда команда все еще работает, потому что сравнивается пустая строка.

волк
источник