2012-03-06 3 views
1

PowerShellの文字列連結で実際に異常な動作が見られます。最初は文字列置換のために"$var1: Hello"構文を使用していましたが、それが機能していなかったので+という単純連結に切り替えました。今私は正確に同じ代入式を使用していることに気づいている、私は2つの異なる結果を得る。PowerShellの文字列連結は、関数の内部と内部で異なる動作をします。

これは私にとってバギーですが、私は何か間違っていないことを確認したいと思います。最初の文字列は、文字列内の正しい場所に/diff/:が含まれているか

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 

注:コンソールに次の書き込み

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) 

。 2番目の文字列には、/diff/:の空白が含まれ、末尾の連結変数の後に/diff/:が追加されます。

私は両方の場所で正確に同じ$url = ...表現を使用しました(私はコピー/ペーストを使っても確かめました)。

私はWindows 7 x64を使用しており、これを2つの異なるマシンでテストしました。

この現象が発生する可能性があります。

+1

http://stackoverflow.com/tags/powershell/info – manojlds

+0

このゴチャチャは、大きな時間に私を得ました。ありがとう@manojlds – zionyx

答えて

5

私はあなたの関数に引数を渡す方法に問題があると思います。

Test-Diff $sRepoGUID $sChangeset1 $sChangeset2 
+0

もちろん!私はそれを逃したとは信じられません。カンマを使用すると、値を単一のパラメータとして連結します。 –

4

短答:Test-Diff $sRepoGUID $sChangeset1 $sChangeset2は、3つのパラメータを渡す正しい構文です。

長い答え:($sRepoGUID, $sChangeset1, $sChangeset2)は、3つの要素の配列です。したがって、Test-Diff ($sRepoGUID, $sChangeset1, $sChangeset2)を呼び出すと、渡すことを意味する3つのパラメータではなく、実際には配列の1つのパラメータを持つTest-Diffが呼び出されます。だから、式の

$ g_backendUrl + "レポ/" + $ sRepoGUID + "/差分/" + $ sChangeset1 + ":"?+ $ sChangeset2 +」形式= jsonの& ignorews = Trueの& MAXSIZE = 100000 &タイムアウト= 10"

$sRepoGUID配列であり、そして$sChangeset1$sChangeset2が共にヌルであり、得られた文字列にテキストを寄与しないが、34CAA433-1600-469E-95B7-35CA0A0FECF4 9d21e91b213a07e56d16a9b8fe519ad570d5c46e 68269169cdd0b803d0e419752ce9cae627e589e5として文字列にレンダリングされます。

関連する問題