在YAML中,我有一个非常长的字符串.我想将它保留在我的编辑器的80列(或左右)视图中,所以我想打破字符串.这是什么语法?
换句话说,我有这个:
Key: 'this is my very very very very very very long string'
Run Code Online (Sandbox Code Playgroud)
我想要这个(或者这个效果):
Key: 'this is my very very very ' +
'long string'
Run Code Online (Sandbox Code Playgroud)
我想使用上面的引号,所以我不需要在字符串中转义任何东西.
我试着理解这里的规格,但实际上很难理解.
http://www.yaml.org/spec/1.2/spec.html#id2779048
据我所知,有三种方式包装文本,但它们的功能非常相似......实际上是如此相似,以至于我没有把所有这些都用来代替一两个.
我的问题是我有一些非常长的字符串(约700个字符),但没有空格.现在我当然希望将它放在多行中,但似乎没有办法在没有任何我不想要的换行符或空格字符的情况下这样做.
这实际上是可能的吗?
---
aTest:
hereComes
SomeText
ThatShould
NotHave
AnyWhitespaces
Run Code Online (Sandbox Code Playgroud) 如何在 YAML 中断开长字符串(如长 url 或文件名/路径),而不会将换行符变成空格?
示例输入:
url: >
https://example.com/?what=Lorem
%20ipsum%20dolor
%20sit%20amet
Run Code Online (Sandbox Code Playgroud)
输出:
{
"url": "https://example.com/?what=Lorem %20ipsum%20dolor %20sit%20amet"
}
Run Code Online (Sandbox Code Playgroud)
期望的输出:
{
"url": "https://example.com/?what=Lorem%20ipsum%20dolor%20sit%20amet"
}
Run Code Online (Sandbox Code Playgroud) 我使用confluentinc/cp-kafkaDocker 映像在本地运行 Kafka,并设置以下日志记录容器环境变量:
KAFKA_LOG4J_ROOT_LOGLEVEL: ERROR
KAFKA_LOG4J_LOGGERS: >-
org.apache.zookeeper=ERROR,
org.apache.kafka=ERROR,
kafka=ERROR,
kafka.cluster=ERROR,
kafka.controller=ERROR,
kafka.coordinator=ERROR,
kafka.log=ERROR,
kafka.server=ERROR,
kafka.zookeeper=ERROR,
state.change.logger=ERROR
Run Code Online (Sandbox Code Playgroud)
我在 Kafka 日志中看到 Kafka 以以下配置启动:
===> ENV Variables ...
ALLOW_UNSIGNED=false
COMPONENT=kafka
CONFLUENT_DEB_VERSION=1
CONFLUENT_PLATFORM_LABEL=
CONFLUENT_VERSION=5.4.1
...
KAFKA_LOG4J_LOGGERS=org.apache.zookeeper=ERROR, org.apache.kafka=ERROR, kafka=ERROR, kafka.cluster=ERROR, kafka.controller=ERROR, kafka.coordinator=ERROR, kafka.log=ERROR, kafka.server=ERROR, kafka.zookeeper=ERROR, state.change.logger=ERROR
KAFKA_LOG4J_ROOT_LOGLEVEL=ERROR
...
Run Code Online (Sandbox Code Playgroud)
我仍然在日志中看到更下面的INFO和TRACE日志级别。例如:
[2020-03-26 16:22:12,838] INFO [Controller id=1001] Ready to serve as the new controller with epoch 1 (kafka.controller.KafkaController)
[2020-03-26 16:22:12,848] INFO [Controller id=1001] Partitions undergoing preferred replica election: (kafka.controller.KafkaController)
[2020-03-26 16:22:12,849] …Run Code Online (Sandbox Code Playgroud) 我有这样的字典:
env: qat
target_host: >
{%if env in ['prd'] %}one
{%elif env in ['qat','stg'] %}two
{%else%}three
{%endif%}
Run Code Online (Sandbox Code Playgroud)
当我打印它时,我得到:
ok:[localhost] => {"var":{"target_host":"two"}}
所以它将行末尾的\n转换为空格.这正是应该做的.但是在这种情况下,我只是试图分散线条以使if/else的结构更具可读性,而且我不想要额外的空间.如果我把它全部放在没有>的一行上,它可以正常工作但我希望能够使它成为多行,这样它更容易阅读.
我发现这个问题 有没有办法表示一个长字符串,在YAML文档中的多行上没有任何空格?
所以我能做到:
env: qat
target_host: "{%if env in ['prd'] %}one\
{%elif env in ['qat','stg'] %}two\
{%else%}three\
{%endif%}"
Run Code Online (Sandbox Code Playgroud)
这给出了理想的结果.
无论如何要实现这一目标而不是更加混乱吗?
yaml ×3
ansible ×1
apache-kafka ×1
docker ×1
line-breaks ×1
log4j ×1
logging ×1
readability ×1
string ×1
syntax ×1
word-wrap ×1