假设我有一个c:\temp\temp.txt包含内容的文档
line 1
line 2
Run Code Online (Sandbox Code Playgroud)
我创建了以下功能
PS>function wrapit($text) {
@"
---Start---
$text
---End---
"@
}
Run Code Online (Sandbox Code Playgroud)
然后跑 PS> wrapit((Get-Content c:\temp\temp.txt))
将输出
---Start---
line 1 line 2
---End---
Run Code Online (Sandbox Code Playgroud)
我如何保留换行符?追加与插值无关.
我发现了这个相关的问题,但在这里他们使用的是字符串数组.我正在使用一个字符串,其中包含换行符(如果直接从函数内部输出字符串而不连接,则可以看到它们,并$text | gm确认我正在处理字符串,而不是数组).我可以在世界上进行所有的字符串解析,将其锤入到位,但这似乎就像是在圆孔中敲击一个方形钉.我错过了什么概念?
JPB*_*anc 11
一个简单的方法来做你想要的是:
wrapit((Get-Content c:\temp\temp.txt | out-string))
Run Code Online (Sandbox Code Playgroud)
现在解释:Here-strings @""只是表现得像字符串"",结果是由于变量扩展中的PowerShell行为.试一试:
$a = Get-Content c:\temp\temp.txt
"$a"
Run Code Online (Sandbox Code Playgroud)
关于你的评论:
$a | Get-Member
TypeName: System.String
...
Run Code Online (Sandbox Code Playgroud)
但
Get-Member -InputObject $a
TypeName: System.Object[]
...
Run Code Online (Sandbox Code Playgroud)
第一个答案是OK(它接收字符串).它每次都不会重复System.string.在第二个它接收一个数组作为参数.
的儿子...
经过调查,它似乎Get-Content返回一个字符串数组.当然,默认情况下通过连接默认字符来强制转换为字符串' '.
真正令人费解的是为什么结果被强制get-member转换为字符串.有人知道为什么会这样吗?在我明确检查之前,问题并不明显Get-Type
在任何情况下,解决方案是使用[system.io.file]::ReadAllText('c:\temp\temp.txt')over 读取文件Get-Content
| 归档时间: |
|
| 查看次数: |
6248 次 |
| 最近记录: |