假设我的文档c:\temp\temp.txt
包含内容
line 1
line 2
我创建了以下函数
PS>function wrapit($text) {
@"
---Start---
$text
---End---
"@
}
然后运行PS> wrapit((Get-Content c:\temp\temp.txt))
将输出
---Start---
line 1 line 2
---End---
如何保留换行符?追加与插值无关。
I found this related question,但这里他们使用的是字符串数组。我正在使用一个单行字符串,其中包含换行符(如果直接从函数内部输出字符串而不连接,则可以看到它们,$text | gm
确认我正在处理字符串,而不是数组)。我可以在世界上进行所有的字符串解析,将其锤入到位,但这似乎就像是在圆孔中敲击一个方形钉。我缺少的概念是什么?
答案 0 :(得分:11)
做你想做的事的一个简单方法是:
wrapit((Get-Content c:\temp\temp.txt | out-string))
现在解释:Here-strings @“”只是表现得像字符串“”,结果是由于变量扩展中的PowerShell行为。试试吧:
$a = Get-Content c:\temp\temp.txt
"$a"
关于你的评论:
$a | Get-Member
TypeName: System.String
...
但是
Get-Member -InputObject $a
TypeName: System.Object[]
...
第一个答案是OK(它接收字符串)。它每次都不会重复System.string。在第二个接收数组作为参数。
答案 1 :(得分:7)
儿子...
经过调查,似乎Get-Content
返回一个字符串数组。默认情况下,通过连接默认字符' '
,这当然是强制转换为字符串。
真正令人费解的是为什么结果被get-member
强制转换为字符串。 任何人都知道为什么会发生这种情况?在明确核实Get-Type
无论如何,解决方案是使用[system.io.file]::ReadAllText('c:\temp\temp.txt')
Get-Content