База знаний (цифровой суверенитет)
  • Язык YAML

    Разная информация
    1 2 9

    A
    1,168
    0

    Содержание

  • A
    1,168
    0

    📘 Одинарные и двойные кавычки в 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