通过脚本设置管道变量时,Azure DevOps 是否会删除引号?

Does Azure DevOps remove quotation marks when setting a pipeline variable via a script?

我必须在我的 Azure DevOps 管道中为 ARM 模板设置一个数组。我这样设置我的变量:


$foo = '["' + 'bar' + '"]'
Write-Host $foo
#######Assign Variables with Correct Value in pipeline
Write-Host "##vso[task.setvariable variable=fooVariableInPipeline]$foo"

$foo 的值很好,如预期的那样 ["bar"]。 但是当我在设置变量后检查下一个任务中的值时,它会删除引号并将值显示为 [bar].

这很奇怪,我想知道是我的问题还是错误?有什么解决方法吗?

目前,我已经直接使用powershell代码更新了我的文件。

你可以试试这里的字符串:

$foo = @"
    ["bar"]
"@

Does Azure DevOps remove quotation marks when setting a pipeline variable via a script?

这个问题不是来自 azure devops,而是取决于你下一个任务的语法。

如果我使用 command line 任务输出那个变量,它工作正常:

echo $(fooVariableInPipeline)

输出:

但是,如果我们用powershell任务输出,会去掉引号:

Write-Host "fooVariableInPipeline is $(fooVariableInPipeline)"

输出:

要解决这个问题,我们需要用单引号将变量括起来,使其成为文字字符串,如:

$Testfoo= '$(fooVariableInPipeline)'

Write-Host "Testfoo is $Testfoo"

现在,它工作正常:

希望这对您有所帮助。

我自己 运行 进入这个问题。

解决方法是使用两个双引号。

在 powershell 中:

$foo -replace '"', '""'