在PowerShell中,我看到字符串連接中出現了非常奇怪的行爲。起初,我使用"$var1: Hello"
語法進行字符串替換,但隨後切換到與+
簡單級聯,因爲它不起作用。現在我注意到,使用完全相同的賦值表達式,我得到了兩個不同的結果。PowerShell字符串連接在函數內部與外部行爲有所不同
這對我來說是越野車,但我想確保我沒有做錯什麼。
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上,並在兩臺不同的機器上測試過。
可能會發生什麼情況導致此行爲?
http://stackoverflow.com/tags/powershell/info – manojlds 2012-03-06 21:39:49
這個問題讓我感到很開心。謝謝@manojlds – zionyx 2017-06-16 13:09:06