экранировать одинарную кавычку в файле yaml - PullRequest
0 голосов
/ 09 октября 2019

Как я могу избежать одиночной кавычки в yaml для следующих утверждений. В основном для выражений awk и sed ниже ??

...
    command: ['sh', '-c']
    args: ['
        awk -F"\t" '{print $1}' ....
        sed \\'s/\"//g\\' ....
                    ']

Так что минимальный пример как ниже

command: ['sh', '-c']
args: ['
          echo " Single quote is '  "
          ']
will fail with error: error parsing exemple.yml: error converting YAML to JSON: yaml: line 2: mapping values are not allowed in this context

1 Ответ

0 голосов
/ 09 октября 2019

Непосредственной причиной вашей ошибки является то, что args: имеет отступ справа от command:. Предполагая, что вы хотите, чтобы command: и args: были ключами одного и того же отображения, они должны иметь одинаковые отступы.

Что касается экранирования внутренних кавычек в YAML, самое простое решение - делать не .

В вашем YAML вы используете последовательность стилей потока ([ … ]) с одним элементом, скаляр стиля потока (строка), заключенный в кавычки ('…'). Чтобы избежать проблем, переключитесь на последовательность стилей блока и литеральный скалярный стиль блока :

command: [sh, -c]
args:
  - |
    awk -F"\t" '{print $1}' ...
    sed 's/"//g' ...

В приведенном выше YAML значение, соответствующее argsКлюч все еще является последовательностью с одним элементом, но он использует стиль блока, в котором каждому элементу предшествует -. | указывает буквальный стиль , означающий, что все последующие строки (с таким же или большим отступом, что и у первого) являются одним скаляром, и разрывы строк должны быть сохранены.

Вы можете увидеть, как будет проанализирован этот YAML - и как правильно сохранены несколько строк и внутренние кавычки строки - в следующем фрагменте.

const yaml = `
command: [sh, -c]
args:
  - |
    awk -F"\t" '{print $1}' ...
    sed 's/"//g' ...
`;

const data = jsyaml.safeLoad(yaml);

console.log(data);
console.log(data.args[0]);
<script src="https://cdnjs.cloudflare.com/ajax/libs/js-yaml/3.13.1/js-yaml.min.js"></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...