这是我的代码:
$collection1 = "1","2","3","4"
"
collection1:
$($collection1 | % {$_})
"
输出为:
collection1: 1 2 3 4
但是,我期望:
collection1: 1 2 3 4
所以我将代码更改为:
"
$($collection1 | % {$_ + "`n"})
"
现在,它显示:
collection1: 1 2 3 4
为什么每行的前面总是有多余的空间?
有什么方法可以删除它们?
我尝试使用Trim()
,[String]::Format()
和其他几种方式,但都没有按预期工作。
答案 0 :(得分:0)
我想我找到了答案...为了任何人的利益...
$collection1 = "1","2","3","4"
$body = [System.Text.StringBuilder]::new()
foreach($item in $collection1)
{
[void]$body.Append($item+"`n")
}
"
collection1:
$body
"
答案 1 :(得分:0)
$collection1 | % {$_}
接受数组$collection1
并输出其每个元素,这为您提供了与之完全相同的东西:$collection1
元素的数组。使用子表达式将该数组放入字符串会自动将该数组转换为字符串,以便可以将其插入外部字符串。在PowerShell中,此数组到字符串的转换是通过将数组元素与$OFS
字符(输出字段分隔符,默认为单个空格)相连而完成的,在您的示例中,该字符串产生字符串“ 1 2 3 4”。
获得期望结果的最简单方法是自己将数组转换为格式化的字符串:
"
collection1:
$($collection1 | Out-String)
"
Out-String
cmdlet通过将所有输入字符串与换行符连接在一起,将数组输入转换为单个字符串。或者,您也可以自己加入数组:
"
collection1:
$($collection1 -join "`n")
"
您还可以(临时)修改$OFS
并直接使用该变量:
$OFS_bak = $OFS
$OFS = "`n"
"
collection1:
$collection1
"
$OFS = $OFS_bak
尽管我通常不建议这样做。
作为旁注:使用格式/模板字符串时,通常最好使用here-strings(这样就不需要在字符串中使用escpae引号)和format operator( -f
):
@"
collection1:
{0}
"@ -f ($collection1 | Out-String)