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 }}'
我正在使用管道模板并有一些字符串运行时参数,这些参数将是文件系统路径并且它们包含反斜杠,我正在呼应它们以测试模板管道并尝试了所有可能的方法
- 没有引号
- 单引号
- 双引号用另一个反斜杠转义反斜杠
回显所有这些不同的字符串从不显示反斜杠,在我看来这不是日志显示问题(访问原始日志我从来没有看到一个反斜杠但是我传递了路径)。
这是我用来测试我正在做的事情的简单管道模板
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 }}'