Одна строка — разные правила чтения

В YAML запись строки выбирают не только ради внешнего вида: от неё зависит, как интерпретируются специальные символы, пробелы и переносы. Обычный текст без кавычек называется простым скаляром: например, `привет`. Он компактен, но некоторые сочетания символов YAML трактует особым образом, поэтому для спорных значений удобнее добавить кавычки.

В одинарных кавычках текст почти всегда воспринимается буквально; чтобы записать апостроф, его удваивают: `'it''s'`. Двойные кавычки позволяют задавать специальные символы с помощью обратной косой черты — например, `"строка\nстрока"` содержит обозначение переноса строки. Поэтому выбор между двумя видами кавычек может менять не только оформление, но и результат разбора.

Блоки для текста в несколько строк

Если значение занимает несколько строк, YAML предлагает два заметно разных блока. Буквальный блок начинается с `|` и сохраняет переносы строк. Сворачиваемый блок начинается с `>`: обычные переносы внутри абзаца обычно превращаются в пробелы, так что текст читается как цельная фраза. Пустые строки при этом помогают отделять абзацы.

Например, список шагов или стихотворение часто записывают с `|`, чтобы переносы остались частью значения. Длинное описание, которое удобнее читать в редакторе по нескольким строкам, можно оформить через `>`, если в готовой строке переносы не нужны. Содержимое блока задаётся отступом: он показывает, где заканчивается значение и начинается следующий элемент YAML.

Почему оформление различается

У YAML есть пять основных стилей скалярных значений: простой, два вида кавычек и два вида блоков. Дополнительные маркеры и правила для многострочных значений позволяют варьировать сохранение завершающего переноса и отступов — отсюда и встречающиеся описания о девяти способах записи строки.

Разработчик обычно выбирает форму под задачу: компактность, точную передачу символов или удобство чтения длинного текста. Поэтому два конфигурационных файла могут хранить одинаковое значение, но выглядеть совершенно по-разному — и при этом один из них может намеренно сохранять переносы, которые другой сворачивает.