PowerShell代码:
$string = @'
Line 1
Line 3
'@
$string
输出:
Line 1
Line 3
但我希望它能输出:
Line 1
Line 3
我该如何实现这个目标?
PowerShell代码:
$string = @'
Line 1
Line 3
'@
$string
输出:
Line 1
Line 3
Line 1
Line 3
script
中也可以。
我不记得在哪里看到的了,但我读到过控制台主机代码中存在错误,当交互输入here-string时,空行将被丢弃。
目前我无法测试Powershell V.3.0控制台错误是否已经修复。
问题链接:http://connect.microsoft.com/PowerShell/feedback/details/571644/a-here-string-cannot-contain-blank-line
解决方法:添加反引号`。$string = @"
Line 1
`
Line 3
"@
"@+[environment]::NewLine+[environment]::NewLine+@"
虽然看起来不太美观,但可以按照需要工作。
上面的示例将变为:$string = @"
Line 1
"@+[environment]::NewLine+[environment]::NewLine+@"
Line 3
"@
还有另一种方法,特别是如果您不想更改字符串本身。这个快速的解决方案对我非常有效,因为它恢复了 Here-String / Verbatim-String 中存储的预期 New-Line 字符(CRLF)的行为而不必更改 Here-String 本身。您可以做的是:
$here_str = $here_str -split ([char]13+[char]10)
或者
$here_str = $here_str -split [Environment]::NewLine
为了测试,您可以进行行数统计:
($here_str).Count
这是您的示例:
$string = @'
Line 1
Line 3
'@
#Line-Count *Before*:
$string.Count #1
$string = $string -split [Environment]::NewLine
#Line-Count *After*:
$string.Count #3
$string
输出:
Line 1
Line 3
HTH