use*_*519 17 yaml escaping ansible ansible-playbook
我需要在ansible playbook中正确地转义单引号和双引号以设置环境变量.这些都不起作用:
- name: Set environment variable
command: >
export EXTRA_CONFIG=“'”{"client": {"subscriptions": ["DIND-Worker"], "cluster": "internal"}}“'”
- name: Set environment variable
command: >
export EXTRA_CONFIG=''{"client": {"subscriptions": ["DIND-Worker"], "cluster": "internal"}}''
- name: Set environment variable
command: >
export EXTRA_CONFIG=''{\"client\": {\"subscriptions\": [\"DIND-Worker\"], \"cluster\": \"internal\"}}''
Run Code Online (Sandbox Code Playgroud)
看着这个:
http://yaml.org/spec/current.html#id2532720
https://github.com/dotmaster/toYaml/issues/1
我得到的错误信息是:
fatal: [ip.address]: FAILED! => {"changed": false, "cmd": "export 'EXTRA_CONFIG={\"client\":' '{\"subscriptions\":' '[\"DIND-Worker\"],' '\"cluster\":' '\"internal\"}}'", "failed": true, "msg": "[Errno 2] No such file or directory", "rc": 2}
Run Code Online (Sandbox Code Playgroud)
fly*_*lyx 20
>启动一个块标量,你根本不需要转义任何东西(并且没有处理转义序列).因此,假设您需要围绕类似JSON的值的单引号,只需执行以下操作:
- name: Set environment variable
command: >
export EXTRA_CONFIG='{"client": {"subscriptions": ["DIND-Worker"], "cluster": "internal"}}'
Run Code Online (Sandbox Code Playgroud)
编辑:还要注意,默认情况下折叠标量包含尾随换行符.如果你不想拥有它,只需使用>-而不是>.
您正在使用折叠样式标量(由引入>),并且根据YAML 1.2规范,您不能转义字符:
折叠标量:
折叠样式由“>”指示符表示。它类似于文字风格。但是,折叠标量会折线。
并且相关文本以文字样式标量转义。
在文字标量中,所有(缩进的)字符都被视为内容,包括空格字符。请注意,所有换行符均已标准化。此外,空行不会折叠,尽管最后的行中断和尾随的空行会被切掉。
从您的示例尚不清楚您真正想要做什么。您可能应该放弃折叠样式而改用双引号样式:
用双引号引起来的样式由周围的“””指示符指定。这是唯一能够使用“ \”转义序列来表示任意字符串的样式。这是以必须转义“ \”和“””为代价的字符。
或单引号样式:
单引号样式由周围的“'”指示符指定。因此,在单引号中,这些字符需要重复。这是在单引号标量中执行转义的唯一形式。特别是,可以自由使用“ \”和“”字符,这将单引号标量限制为可打印字符。此外,仅可以折断长单引号行,其中空格字符被非-空间。
因此,您应该首先确定输出应该是什么,然后如果需要使用反斜杠转义任何字符。如果您不这样做,则可以不使用任何转义就使用折叠样式,或者通过转义来使用单引号样式',或者通过转义"和any来使用双引号样式\。如果需要\转义双引号样式是唯一的选择。
| 归档时间: |
|
| 查看次数: |
32073 次 |
| 最近记录: |