【问题标题】:How use write to stdout without a newline?如何在没有换行符的情况下使用写入标准输出?
【发布时间】:2015-01-08 04:40:47
【问题描述】:

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

例如:

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

输出:

A
B

Write-Host 不好 - 它会将数据写入控制台本身,而不是标准输出流)

【问题讨论】:

  • @EmpereurAiman 不,这不是同一个问题。
  • newoline 不适合这个输出的去向吗?否则只需构建您输出的字符串或字符串数​​组来控制换行符$text = ("This","is","some","words") -join " "; Write-Output $text

标签: powershell stdout


【解决方案1】:

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

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

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

【讨论】:

    【解决方案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 这样做的。

    【讨论】:

    • 嗯,这很奇怪,因为powershell -command "write-output A; write-output B" 包含换行符。它是从哪里来的?
    • Out-Default 正在添加换行符,它会自动附加到未终止的管道上。 technet.microsoft.com/en-us/magazine/gg213852.aspx Out-Default 的默认值为 Out-Host。
    【解决方案3】:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-29
      • 1970-01-01
      • 2013-10-04
      • 1970-01-01
      • 2019-11-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多