使用Write-Output
命令时,会自动追加新行。如何在没有换行符的情况下将字符串写入stdout(标准输出)?
例如:
powershell -command "write-output A; write-output B"
输出:
A
B
(Write-Host
不好 - 它将数据写入控制台本身,而不是写入stdout流)
答案 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-List
或Format-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