Я вижу действительно странное поведение в конкатенации строк в PowerShell. Сначала я использовал синтаксис "$var1: Hello"
для замены строк, но затем переключился на простую конкатенацию с +
, потому что она не работала. Теперь я замечаю, что используя одно и то же выражение присваивания, я получаю два разных результата.
Мне это кажется ошибочным, но я хочу убедиться, что я не делаю что-то не так.
function Test-Diff([string] $sRepoGUID, [string] $sChangeset1, [string] $sChangeset2){
$url = $g_backendUrl + "repo/" + $sRepoGUID + "/diff/" + $sChangeset1 + ":" + $sChangeset2 + "?format=json&ignorews=True&maxsize=100000&timeout=10"
Write-Output $url
}
$g_backendUrl = "http://localhost:56783/"
$sRepoGUID = '34CAA433-1600-469E-95B7-35CA0A0FECF4'
$sChangeset1 = '9d21e91b213a07e56d16a9b8fe519ad570d5c46e'
$sChangeset2 = '68269169cdd0b803d0e419752ce9cae627e589e5'
$url = $g_backendUrl + "repo/" + $sRepoGUID + "/diff/" + $sChangeset1 + ":" + $sChangeset2 + "?format=json&ignorews=True&maxsize=100000&timeout=10"
Write-Output $url
Test-Diff($sRepoGUID, $sChangeset1, $sChangeset2)
, который пишет в консоль следующее:
http://localhost:56783/repo/34CAA433-1600-469E-95B7-35CA0A0FECF4/diff/9d21e91b213a07e56d16a9b8fe519ad570d5c46e:68269169cdd0b803d0e419752ce9cae627e589e5?format=json&ignorews=True&maxsize=100000&timeout=10
http://localhost:56783/repo/34CAA433-1600-469E-95B7-35CA0A0FECF4 9d21e91b213a07e56d16a9b8fe519ad570d5c46e 68269169cdd0b803d0e419752ce9cae627e589e5/diff/:?format=json&ignorews=True&maxsize=100000&timeout=10
Обратите внимание, что первая строка содержит /diff/
и :
в правильном месте в строке. Вторая строка содержит пробелы, в которых /diff/
и :
должны быть и вместо них добавляются /diff/
и :
после последней объединенной переменной.
Я использовал одно и то же выражение $url = ...
в обоих местах (я даже использовал копирование / вставку, чтобы быть уверенным).
Я нахожусь на Windows 7 x64 и проверил это на двух разных машинах.
Что может быть причиной такого поведения?