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