說明
遇到一個powershell Here string 中的換行致使的坑,這裏來驗證下不一樣版本中powershell here string 的行爲。若是你不有心注意,極可能踩坑。shell
PS1 中的here string 表現
- 不能使用空的here string ,不然你會發如今console 中敲入屢次回車,這個here string 都閉合不了。
- 若是here string 中有換行,換行會被吃掉。
PS2 中的here string 表現
- 能夠使用空的here string
- 若是here string 中有換行,換行會被吃掉。
PS3 中的here string 表現
同PS2,驗證方法同PS2ide
PS4 中的here string 表現
同PS2,驗證方法同PS2post
PS5 中的here string 表現
- 能夠使用空的here string
- 若是here string 中有換行,換行會被保留。
- 換行符是\n ,而不是\r\n 也就是CRLF,這點在特定狀況下影響很大(好比http Post 的數據的換行符明確要求是CRLF,少個\r ,你可能post 會出錯的。)
總結
- 若是要在powershell here string 中保留換行,那麼顯示的方式是直接寫成下面
$a=@"
`r`n
aa
"
可是你會發現,powershell 在多個版本中會給你再多加一個\ncode
PS C:\> $a=@"
>> `r`n
>> aa
>> "@
>>
PS C:\> $a.length
5
PS C:\> $a=@"
>> `r`n
>> aa
>> "@
>>
PS C:\> $a.legnth
PS C:\> $a.length
5
PS C:\> $b=$a -replace '(\r\n|\r|\n)',"`r`n"
PS C:\> $b.length
6
PS C:\> $b
aa
PS C:\>