PowerShell 在哪里获取它放在此处字符串中的换行符?
Where does PowerShell get the newline characters it puts in here strings?
考虑以下 PowerShell 代码:
@"
"@.GetEnumerator() | %{[int]$_}
在我的电脑上输出
13
10
分别是回车 return 和换行的 ASCII 控制字符的十进制表示。
The same code executed on AppVeyor outputs just a single number:
10
换句话说,PowerShell 在此处字符串中跨系统使用的字符之间似乎存在差异。我希望来源是 [System.Environment]::newline
但 the same environment AppVeyor environment that output the single character in the here string, output
13
10
为 [System.Environment]::newline
。 [System.Environment]::newline
似乎不是此处字符串中换行符的来源。
PowerShell 脚本本质上是一个字符串。而且它已经必须使用 "`n"
或 "`r`n"
进行换行。因此,如果 PowerShell 字符串文字跨越多行,则 PowerShell 解析器会保留行分隔符,该分隔符在此字符串文字中使用,作为字符串文字值的一部分。
例如:
"'a`nb`r`nc'.GetEnumerator() | %{[int]`$_}" | Set-Content .\Test.ps1
.\Test.ps1
将打印:
97
10
98
13
10
99
考虑以下 PowerShell 代码:
@"
"@.GetEnumerator() | %{[int]$_}
在我的电脑上输出
13
10
分别是回车 return 和换行的 ASCII 控制字符的十进制表示。
The same code executed on AppVeyor outputs just a single number:
10
换句话说,PowerShell 在此处字符串中跨系统使用的字符之间似乎存在差异。我希望来源是 [System.Environment]::newline
但 the same environment AppVeyor environment that output the single character in the here string, output
13
10
为 [System.Environment]::newline
。 [System.Environment]::newline
似乎不是此处字符串中换行符的来源。
PowerShell 脚本本质上是一个字符串。而且它已经必须使用 "`n"
或 "`r`n"
进行换行。因此,如果 PowerShell 字符串文字跨越多行,则 PowerShell 解析器会保留行分隔符,该分隔符在此字符串文字中使用,作为字符串文字值的一部分。
例如:
"'a`nb`r`nc'.GetEnumerator() | %{[int]`$_}" | Set-Content .\Test.ps1
.\Test.ps1
将打印:
97
10
98
13
10
99