YAML 文件中的转义单引号



如何在 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

错误的直接原因是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>

最新更新