【问题标题】:YAML, linting - syntax error - unknown escape character 'YAML,linting - 语法错误 - 未知转义字符'
【发布时间】:2021-05-18 06:40:36
【问题描述】:

开发者社区你好!

我想就以下问题寻求一些帮助,我有以下 YAML 数据:

---
# yamllint disable rule:indentation rule:empty-lines
                      config_nsapp_cs_policy:
                      nsapp_cs_policy:

                          - policyname:                "url_app_preprd"
                            rule:                      "URL == \'/string/*\'"

当尝试对 YAML 文件运行 YAML lint 时,我收到以下错误:

  7:69      error    syntax error: found unknown escape character "'" (syntax)

是否可以为这个特定的 linting 规则定义一个例外规则(忽略“单引号”中的有问题的内容)?我正在考虑完全禁用/忽略整个文件的 YAML linting,但这不是最好的方法。我不知道单引号匹配哪个 YAML linting 规则。单引号应在该行中。

非常感谢您!

【问题讨论】:

    标签: yaml lint


    【解决方案1】:

    这不是 linter 错误,这是解析器错误。您的输入是无效的 YAML,因为 YAML 中未定义转义序列 \'

    如果标量内容应该只包含单引号,请这样做

        rule: "URL == '/string/*'"
    

    如果标量内容还应包含反斜杠,请执行

        rule: "URL == \\'/string/*\\'"
    

    您可以使用块标量来避免转义反斜杠:

        rule: >-
          URL == \'/string/*\'
    

    【讨论】:

    • 这意味着你需要反斜杠,所以你应该使用第二个或第三个选项。
    • 感谢您的反馈。问题在于,此 YAML 定义包含以下格式的 Citrix NetScaler 配置:add cs policy url_app_preprd -rule "URL == \'/string/*\'" - 这意味着,YAML 定义应引用与存储在 NetScaler 配置中相同格式的内容。
    • YAML 定义应该引用相同格式的内容“但事实并非如此。您需要了解,如果您在 YAML 文件中放入任何内容,则它需要遵守 YAML 格式。没有办法解决这个问题。你不能告诉 YAML 解析器“请允许转义序列\',这通常是被禁止的”。
    • 您是对的,感谢您为我指明了正确的方向。删除单引号前的转义字符后,Citrix NS 也接受此格式,但符合 YAML 格式。
    猜你喜欢
    • 2017-09-08
    • 2019-10-11
    • 2019-02-25
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    • 2023-03-04
    • 2014-09-20
    • 1970-01-01
    相关资源
    最近更新 更多