¿Cómo puedo escapar de una sola comilla dentro de yaml para las siguientes declaraciones? ¿Básicamente para las expresiones awk y sed a continuación?

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

Entonces, un ejemplo mínimo como el siguiente

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
0
david 9 oct. 2019 a las 17:14

1 respuesta

La mejor respuesta

La causa directa de su error es que args: tiene una sangría más a la derecha que command:. Suponiendo que desea que command: y args: sean claves del mismo mapeo, deben tener la misma sangría.

En cuanto a cómo escapar de las comillas internas en YAML, la solución más sencilla es no .

En su YAML, está utilizando una secuencia de estilo de flujo ([ … ]) con un elemento, un escalar de estilo de flujo (cadena) entre comillas ({{X1 }}). Para evitar problemas de escape, cambie a una secuencia de estilo de bloque y escalar de estilo de bloque literal :

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

En el YAML anterior, el valor correspondiente a la clave args sigue siendo una secuencia con un solo elemento, pero usa el estilo de bloque, en el que cada elemento está precedido por -. El | indica estilo literal , es decir, el las líneas que siguen (y que tienen la misma o mayor sangría que la primera) son todas un escalar único y los saltos de línea deben conservarse.

Puede ver cómo se analizará este YAML, y que las múltiples líneas y comillas internas de la cadena se conservan correctamente, en el siguiente fragmento.

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>
0
Jordan Running 9 oct. 2019 a las 16:17