【问题标题】:Azure DevOps pipelines : backslashes in parameters - do they need to be escaped and how?Azure DevOps 管道:参数中的反斜杠 - 它们是否需要转义以及如何转义?
【发布时间】:2020-12-10 18:05:00
【问题描述】:

我正在使用管道模板,并且有一些字符串运行时参数,这些参数将是文件系统路径并且它们包含反斜杠,我将它们呼应出来以测试模板管道并尝试了所有可能的方法

  • 没有引号
  • 单引号
  • 双引号用另一个反斜杠转义反斜杠

回显所有这些不同的字符串从不显示反斜杠,而且在我看来这不是日志显示问题(访问原始日志我从来没有看到一个反斜杠,但是我通过了路径)。

这是我的简单管道模板,用于测试我在做什么

parameters:
- name: string1
  type: string
  default: C:\APPS\XYZ\
- name: string2
  type: string
  default: 'C:\APPS\XYZ\'
- name: string3
  type: string
  default: "C:\\APPS\\XYZ\\"

jobs:
- job: JOB
  displayName: JOB
  steps:
  - checkout: none
  - script: |
      echo 1 ${{ parameters.string1 }}
      echo 2 ${{ parameters.string2 }}
      echo 3 ${{ parameters.string3 }}

【问题讨论】:

    标签: azure-devops azure-pipelines azure-pipelines-yaml


    【解决方案1】:

    最后,反斜杠的消失只是在回显值。我不完全理解为什么会发生这种情况,但显然反斜杠是一个特殊字符并且会被解释。通过将要打印的字符串放在单引号内,这不会发生,并且参数值会正确打印出来。

    这是正确的代码

    parameters:
    - name: string1
      type: string
      # no quotes
      default: C:\APPS\XYZ\
    - name: string2
      type: string
      # single quotes
      default: 'C:\APPS\XYZ\'
    - name: string3
      type: string
      # double quotes
      default: "C:\\APPS\\XYZ\\"
    
    steps:
    - checkout: none
    - script: |
        echo '1 ${{ parameters.string1 }}'
        echo '2 ${{ parameters.string2 }}'
        echo '3 ${{ parameters.string3 }}'
    

    【讨论】:

    • 您好,感谢您的分享,您可以Accept it as an Answer,它可以帮助遇到相同问题的其他社区成员,我们可以存档此线程,谢谢。祝你今天过得愉快。 :)
    【解决方案2】:

    首先,您的第二个值有误——缺少开头的单引号。

    其次,参数值中不需要引号。如果你设置双引号,文本的规则就会改变。

    http://blogs.perl.org/users/tinita/2018/03/strings-in-yaml---to-quote-or-not-to-quote.html

    【讨论】:

    • 您报告的错误仅在发布的问题中出现。我现在更正了。无论如何,与此同时,我找到了“我所看到的原因,我将发布解决方案。
    猜你喜欢
    • 2013-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    • 2015-09-21
    • 2011-11-09
    • 2017-04-21
    相关资源
    最近更新 更多