Azure DevOps 管道:参数中的反斜杠 - 是否需要转义以及如何转义?

Azure DevOps pipelines : backslashes in parameters - do they need to be escaped and how?

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

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

这是我用来测试我正在做的事情的简单管道模板

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 }}

首先,你在第二个值中有错误 - 开头的单引号丢失了。

其次,您不需要在参数值中使用引号。如果您设置双引号,则文本规则会更改。

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

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

这是正确的代码

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 }}'