Непосредственной причиной вашей ошибки является то, что 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>