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


35

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

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

Код один

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

Код два

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

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

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


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

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

Ответы:


31

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

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

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

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

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


Цитаты во втором коде не нужны?
Джонатан

2
Все цитаты в обоих примерах не нужны.
Чороба

6

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

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.