PowerShell 控制台主机显示的字符串不一致

标签 powershell

当我在 PowerShell ISE 中运行此命令时,两个字符串显示相同。 当我在控制台主机中运行它时,字符串 $a 缺少空行。 为什么会这样,我可以解决这个问题吗? 我想在不使用 `n

的情况下格式化文本 block
$a = "there should be one emtpy line

between these two lines of text"

$b = "there should be one emtpy line`n`nbetween these two lines of text"

$a
$b

最佳答案

如果您将其输入控制台主机,则您是对的;它不会按预期工作。但是,如果将其保存在文件中,那么它确实会按预期工作(保留空行)。

我相信这是因为控制台主机使用空行来解释您的输入的方式,因为它需要检测空行来告诉在某些情况下何时停止输入。

我不知道这是否是一个错误。

还有一点可能不清楚的是,当您按照将其分配给 $a 的方式编写时,实际上是在插入 CR 和 LF (“`r`n”)在 ISE 主机中,而对于 $b,您只是使用 LF。在控制台主机中,仅使用 LF。

为了看到这一点,我喜欢使用 [RegEx]::Escape:

[RegEx]::Escape($a)
[RegEx]::Escape($b)

使用这个我能够确认使用控制台主机输入字符串,第二个 LF 实际上不存在于 $a 字符串中;这不仅仅是一个显示问题。

关于PowerShell 控制台主机显示的字符串不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25170167/

相关文章:

相当于 "tail"命令的 Powershell 几乎可以远程工作

xml - 尝试获取XML元素

powershell - 复制项目,其中文件名是计算机主机名

windows - 在 PowerShell 命令中首先评估变量

windows - 如何使证书可信且有效期超过一年

powershell - 代理命令

powershell - 列出群组成员的简单脚本

c# - 从 C# 调用 PowerShell

powershell - 如何强制 Powershell 使用新的 Azure 订阅

powershell - Powershell中的start-process执行完成后自动关闭窗口