gpt4 book ai didi

powershell - 在此处字符串中的子表达式中迭代会产生额外的空格,为什么?

转载 作者:行者123 更新时间:2023-12-02 18:48:58 24 4
gpt4 key购买 nike

问题

在 PowerShell 版本 5.1.15063.726 中运行以下命令

@"
$(foreach ($Number in 1..4) {"$Number`r`n"})
"@

结果

1
2
3
4

每行的新行后面似乎添加了一个尾随空格。

实验

我想这可能是一个怪癖

`r`n

但是使用[Environment]::NewLine有同样的问题:

@"
$(foreach ($Number in 1..4) {"$Number" + [Environment]::NewLine})
"@

1
2
3
4

在没有迭代的情况下做一些看似等效的事情可以按预期工作:

@"
$("1`r`n" + "2`r`n" + "3`r`n" + "4`r`n")
"@
1
2
3
4

以下方法也有效:

@"
$("1" + [Environment]::NewLine)$("2" + [Environment]::NewLine)$("3" + [Environment]::NewLine)$("4" + [Environment]::NewLine)
"@

@"
$("1`r`n")$("2`r`n")$("3`r`n")$("4`r`n")
"@

以下内容不起作用,并会导致新行后出现奇怪的额外空格:

@"
$(1..4 | ForEach-Object {"$_`r`n"})
"@

@"
$(1..4 | ForEach-Object {$("$_`r`n")})
"@

解决方法

认为问题可能与在循环中返回多个字符串有关,我尝试构建一个字符串,然后从有效的循环中返回该字符串:

$String = ""
@"
$( foreach ($Number in 1..4) {$String += "$Number`r`n"}; $String)
"@
1
2
3
4

如果我们在从子表达式返回之前聚合字符串,但在循环外部进行聚合,则会返回相同的奇怪行为:

$String = ""
@"
$($String += foreach ($Number in 1..4) {"$Number`r`n"}; $String)
"@

1
2
3
4

问题

有人知道是什么原因导致这种情况发生吗?

最佳答案

默认输出字段分隔符是空格。您应该能够将 $OFS 设置为空字符串以获得您期望的结果。

关于powershell - 在此处字符串中的子表达式中迭代会产生额外的空格,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47560089/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com