2017-10-03 16 views
3

は、次のPowerShellのコードを考えてみてください。私のコンピュータでPowerShellは、ここで文字列に入れる改行文字をどこから取得しますか?

@" 


"@.GetEnumerator() | %{[int]$_} 

これはそれぞれ、キャリッジ・リターンおよび改行のASCII制御文字の10進表現である

13 
10 

を出力します。

The same code executed on AppVeyor outputs just a single number:つまり

10 

、PowerShellはシステム間でここに文字列で使用する文字の間にばらつきがあるようです。私は、ソースが[System.Environment]::newlineため[System.Environment]::newlineが、the same environment AppVeyor environment that output the single character in the here string, output

13 
10 

ことが期待しました。 [System.Environment]::newlineは、ここの文字列の改行のソースではないようです。

+0

。 GetEnumerator()|%{[int] '$ _}" | "{"} " sc Test1.ps1; "@" "' '' '' '' '' @。GetEnumerator()|%{[int] '$ _}" | sc Test2.ps1; 。\ Test1.ps1 <#10#>; 。\ Test2.ps1 <#13, 10#> '' – PetSerAl

+0

ありがとう@PetSerAl。 ["AppVeyorはWindows上のLF(\ n)エンディングでファイルをチェックアウトしています]"(http://help.appveyor.com/discussions/problems/1119-allow-changing-git-autocrlf-setting)はデフォルトで表示されます。 – alx9r

答えて

1

PowerShellスクリプトは本質的に文字列です。また、ライン分割にはすでに"`n"または"`r`n"を使用する必要があります。そのため、PowerShellの文字列リテラルが複数の行にまたがっている場合、PowerShellパーサーは文字列リテラル値の一部としてこの文字列リテラル内で使用された行区切り文字を保持します。

は、例えば、このために:

"'a`nb`r`nc'.GetEnumerator() | %{[int]`$_}" | Set-Content .\Test.ps1 
.\Test.ps1 

が印刷されます:それはちょうどあなたの文字列であるものは何でも取っ

97 
10 
98 
13 
10 
99 
関連する問題