Azure为变量增加了领先空间

时间:2019-06-13 09:47:52

标签: azure powershell

如果我在本地运行此powershell代码:

$url = "refs/pull/5625/merge"
$SourceBranchFromBuild = $url.split('/')[-1]
$featureReleaseUrl = "http://$sourceBranchFromBuild.azurewebsites.net"
Write-Output $featureReleaseUrl

输出为:

  

http://merge.azurewebsites.net

当我在Azure Powershell上运行此代码时:

$url = "refs/pull/5625/merge"
$SourceBranchFromBuild = $url.split('/')[-1]
Write-Host "##vso[task.setvariable variable=prSourceBranchName;]"$SourceBranchFromBuild

然后在另一个Azure Powershell脚本中创建URL:

$featureReleaseUrl = "http://$env:prSourceBranchName.azurewebsites.net"
Write-Output $featureReleaseUrl

输出是

  

http:// merge.azurewebsites.net

是什么原因导致$env:prSourceBranchName中出现此前导空格字符?

2 个答案:

答案 0 :(得分:1)

Azure没有添加任何内容-您的写主机是!

您的代码正在执行此操作:

PS> $x = "xxx"
PS> write-host "aaa"$x
aaa xxx

但可能您想要

PS> $x = "xxx"
PS> write-host "aaa$x"
aaaxxx

请注意,在两个示例中第二个引号都是write-host。首先,它在$x变量名之前。在第二个之后。

在您的问题中称呼它(在变量名称前加引号 ):

Write-Host "##vso[task.setvariable variable=prSourceBranchName;]"$SourceBranchFromBuild

这会将logging command写入日志文件,Azure DevOps将对其进行处理并更新环境变量。

您可能希望它将 this 写入日志文件:

##vso[task.setvariable variable=prSourceBranchName;]merge

但是它实际上是在写 this

##vso[task.setvariable variable=prSourceBranchName;] merge

尝试将代码切换为此(即变量名后第二个引号 ):

Write-Host "##vso[task.setvariable variable=prSourceBranchName;]$SourceBranchFromBuild"

,并且应该在您的网址中省略分支名称前面的空格。

答案 1 :(得分:0)

@PeterBoomsma尝试将$ SourceBranchFromBuild放在这样的双引号中:

Write-Host "##vso[task.setvariable variable=prSourceBranchName;]$SourceBranchFromBuild"