Язык YAML
-
Содержание
-
Одинарные и двойные кавычки в YAMLВ YAML строки можно заключать в одинарные (
'...') или двойные ("...") кавычки. Оба варианта корректны, но ведут себя по-разному, особенно при работе с особыми символами, переменными окружения и многострочными значениями.Ниже — полное объяснение, обновлённое для всех современных применений YAML.
1. Одинарные кавычки ('...')
Что делаютОдинарные кавычки всегда сохраняют строку буквально.
Никакие спецсимволы, такие как:\n\t$VARIABLE\${VAR}
не интерпретируются, а остаются как есть.
Используйте одинарные кавычки, если:- нужно передать буквально то, что написано;
- вы используете строки с
$,\,", JSON внутри YAML; - конфигурация чувствительна к экранированию (например, regex);
- в Docker Compose значение не должно интерполироваться.
Пример:server_name: 'element3.nbics.net' password: 'pa$$word' regex: '^\d{3}-\d{2}-\d{4}$' path: 'C:\Program Files\App'
Особенность YAML:Единственный символ, который нельзя использовать напрямую внутри
'...', — это'.
Для него используется удвоение:text: 'Bob''s server'
2. Двойные кавычки ("...")
Что делаютДвойные кавычки разрешают интерполяцию переменных и управляющие последовательности:
\nпревращается в перенос строки\t— табуляция\"— экранирование
А также:
- переменные окружения в Docker Compose (
${VAR}) - escape-последовательности YAML (формат JSON)
Используйте двойные кавычки, если:- нужны спецсимволы;
- требуется интерполяция
${VARIABLE}; - конфиг используется в CI/CD, Docker Compose, K8s;
- значение включает переносы строк с escape.
Пример:server_name: "${SERVER_NAME}" welcome: "Hello,\nworld!" path: "C:\\Users\\Admin" json: "{\"key\": \"value\"}"
3. Отличия по поведению (в таблице)Особенность 'одинарные'"двойные"Интерполяция переменных
нет
даОбработка \n,\t,\"
нет
даВыполняет escape-последовательности
нет
даБуквальная строка
да
нетРаботает в Docker Compose безопаснее для переменных Вложенные кавычки только ''для'можно \"
4. YAML без кавычек: когда можноЧаще всего YAML допускает строки без кавычек, если они не содержат спецсимволов:
domain: example.com env: productionНо кавычки требуются, если есть:
- двоеточие
:(кроме конца строки) #{},[]*,&$(в Docker Compose!)\
5. YAML в Docker Compose (важно для 2025)В Docker Compose
"..."интерполирует переменные окружения:environment: DOMAIN: "${DOMAIN}"Если нужно отключить интерполяцию:
environment: PASSWORD: '$ecure$Tr!ng'или даже:
PASSWORD: '${NOT_A_VARIABLE}'
6. YAML в AnsibleВ
Ansibleдвойные кавычки требуются для Jinja2:msg: "Server is {{ inventory_hostname }}"А если Jinja не нужен — безопаснее одинарные:
msg: 'Literal text: {{ not_interpreted }}'
7. YAML и многострочный текстYAML использует блоковые литералы:
Буквальный текст:
script: | echo "Hello" echo "No interpolation"Сжатый вариант:
multiline: > This is a long line that becomes a single lineКавычки тут обычно не используются.
Итог: как правильно выбирать кавычки
Одинарные ('...'), если:- нужен буквальный текст
- нет интерполяции
- есть спецсимволы
$,\,{}, которые должны остаться как есть
Двойные ("..."), если:- нужны переменные
${...} - нужны спецсимволы
\n,\t, Unicode, JSON - сложные значения в CI/CD или Docker Compose