如何在没有换行符的情况下使用stdout写入?

时间:2014-12-25 12:32:49

标签: powershell stdout

使用Write-Output命令时,会自动追加新行。如何在没有换行符的情况下将字符串写入stdout(标准输出)?

例如:

powershell -command "write-output A; write-output B"

输出:

A
B

Write-Host不好 - 它将数据写入控制台本身,而不是写入stdout流)

3 个答案:

答案 0 :(得分:2)

Write-Output没有附加换行符。

试试这个:

filter intchar {[int[]][char[]]$_}

'123' | Write-Output | intchar

49
50
51

过滤器将字符串转换为每个字符的ASCII int表示形式。没有附加换行符。

添加几个显式换行符进行比较:

"1`n2`n3" | write-output | intchar

49
10
50
10
51

现在我们看到了字符之间的其他换行符,但仍未在字符串后附加换行符。

不确定您的应用是什么,但如果您的输出中出现了不需要的换行符,我认为它不是Write-Output正在执行此操作。

答案 1 :(得分:2)

Write-Output对象写入管道,而不是像* nix中的文本那样。它不会进行任何类型的文本格式化,例如追加换行符,因此不需要换行符处理选项。我看到人们经常没有掌握这一点。

如果您指的是控制台输出上打印的换行符,那么因为管道总是最终被Out-Default终止,Format-Custom转发到默认输出目标(通常是Out-Host)反过来,如果它没有收到格式化的输入,则通过适当的默认格式化程序(通常为Format-ListFormat-Table)运行对象。这里的格式化程序是负责格式化输出的过程中唯一的格式化程序,例如在控制台输出的新行上打印每个对象。

您可以通过在管道末尾指定您喜欢的格式化程序来覆盖此默认行为,包括您自己使用{{3}}。

答案 2 :(得分:0)

mjolinor / famousgarkin解释了为什么输出有一个新行本身不是由Write-Output生成的。处理此问题的简单方法是使用Write-Output

构建输出字符串
$text = ("This","is","some","words") -join " "; 
$string = Write-Output $text
$string += Write-Output $text
$string

输出

This is some wordsThis is some words