Quoting YAML (for Travis CI)

escaping, formatting, string-literals, travis-ci, yaml

Solution

The most elegant solution is to use the literal style `|` indicator, with the `-` modifier to strip the final newline. That way there are no extra quotes necessary.

If this scalar happens to be the only thing in a YAML file use:

|-
  json='{"title": "travis_saulshanabrook_site","key": "'$(cat ~/.ssh/id_rsa.pub)'"}'

if it is a mapping value for key `abc`:

abc: |-
  json='{"title": "travis_saulshanabrook_site","key": "'$(cat ~/.ssh/id_rsa.pub)'"}'

or if it is part of a list:

- |-
  json='{"title": "travis_saulshanabrook_site","key": "'$(cat ~/.ssh/id_rsa.pub)'"}'

Problem

How would I escape a whole line in YAML? I want to have `json='{"title": "travis_saulshanabrook_site","key": "'$(cat ~/.ssh/id_rsa.pub)'"}' ` in a list, but I can't get it to parse into a string. I can put single quotes around the whole line, but then I would have to escape every single quote in my string, making it very hard to read. The string will be run as a bash command in Travis CI

Original source