正如这里所描述的,https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/write-output所有的Write-Output都是将输出发送到当前的输出设备,这是默认的。
看起来,显式使用Write-Output的唯一优点是能够提供参数NoEnumerate。对吗?
如果没有,那么使用写输出的其他情况是什么?
正如这里所描述的,https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/write-output所有的Write-Output都是将输出发送到当前的输出设备,这是默认的。
看起来,显式使用Write-Output的唯一优点是能够提供参数NoEnumerate。对吗?
如果没有,那么使用写输出的其他情况是什么?
2条答案
按热度按时间cgyqldqp1#
让我用一个使用
Write-Output
的理由(希望是详尽的)来补充Keith Langmead's answer:(有争议)可读性:
Write-Output
作为产生输出的意图的显式信号:Write-Output
有助于可读性和可维护性,因为它表明了“显式”生成输出的意图。$foo # output
Write-Output
是 * 必需的 *(例如,类似于您在cmd.exe
和Bash中 * 实际上 * 需要echo
;echo
是PowerShell中Write-Output
的 * 内置别名 *);对于有经验的读者来说,这样的呼叫相当于噪声。Write-Output
表达了与语言核心特性之一的持续分歧,尽管其他语言的用户不熟悉,但可以“拥抱”,从而产生更简洁,无干扰的代码,也表现得更好。*输出数组(列表式集合) 作为一个整体 *,即作为单个对象,使用
Write-Output -NoEnumerate
**:-NoEnumerate
交换机可以用来实现这一点;例如:,
的 unary 形式的数组构造函数运算符将数组 Package 在 *transient,单元素数组 * 中,当像往常一样在管道中枚举时,会导致 Package 的数组作为一个整体发送:*展平 * 数组(
... | Write-Output
):Write-Output
会隐式地 * 展平 * 它们,即:返回一个包含输入数组所有元素的一维数组;例如:**使用common parameters,特别是
-OutVariable
和-PipelineVariable
:-OutVariable
(-ov
)允许您将Write-Output
的输出保存到所选的变量中,同时还可以通过管道发送输出。-PipelineVariable
(-pv
)将每个输出对象保存到所选的变量中,然后可以在后续管道段的 script block 参数中访问该变量。Write-Output
,因为您可以在此类命令中直接使用这些参数。但是,如果输出是由 * 简单 * 函数和脚本或 * 外部程序 * 生成的,则需要Write-Host
来使用这些公共参数;例如(这些是人为的,但简单的例子):**语法便利性 :创建(简单)字符串数组:
Write-Output
提供了一种语法上更简单的数组字面量替代方案。,
,因为Write-Output
允许 * 单独 * 指定参数。two and a half
)将需要引用任何方式('two and a half'
):polhcujo2#
我认为主要的优点实际上是代码的可读性,因为它可以很容易地看到您正在向输出发送的内容。
例如,即使是像
我认为扫描代码行更容易立即理解发生了什么,当你看到
而不是仅仅看到
在自己的线路上。
也许值得注意的是,缩短形式似乎正在过时,或者不再以同样的方式推荐。例如,如果您使用VS Code编辑Powershell代码,您可能会注意到它显示了使用别名的警告,例如
ft
aliasingFormat-Table
,select
aliasingSelect-Object
等,其中列出的原因相同,这使得维护代码变得更加困难。