windows - Powershell 显示变量操作是如何工作的?
问题描述
在PowerShell中
$a = 4;
$a
将 4 写入输出流。
Write-Ouput $a
将 4 写入输出流
如果我只想将变量写入输出流,你能解释一下哪种操作性能更好吗?
解决方案
如果您只想查看变量中的内容,则应在变量名称中使用美元符号。这很可能是显示变量值的最快方法。
更新
简短回答:您应该使用只是$a
为了在输出流中写入数据。这是最快的方法。
带解释的长答案:如果你写了类似的东西$a
,那么它会直接进入当前 PowerShell 进程的输出流,换句话说,它会进入输出管道。这是因为在 PowerShell 中,您通常只有三种可能的语句:
- 定义语句:它们是您可以在代码中定义以供进一步使用的所有内容,例如函数或类。
- 赋值语句:给变量赋值。
- Putting-in-the-pipeline 语句:除 1 和 2 之外的所有其他内容。
定义语句示例:
Function foo($bar)
{
#do stuff here
}
赋值语句示例:
$foo = 'bar'
put-in-the-pipeline 语句的示例:这正是您所要求的!如果你写$a
,那么它将被写入输出管道。而已。
现在关于Write-Output
. 根据官方 PowerShell 存储库中的这段代码,它只是另一个 PowerShell Cmdlet 的包装器,即WriteObject。因此,调用比调用Write-Output
花费更多的时间WriteObject
。
正如 Lee_Dailey 在对您的问题的第一条评论中提到的那样,Mark Kraus 在他的博客中写了一篇精彩的文章Let's Kill Write-Output 。乍一看,这似乎与您的问题没有太大关系,但本文解释了您在脚本中编写的对象以及当它们没有被不同的“打印功能”(如Write-Out
. 在那里,您还可以找到如何“绕过”Write-Out
在不同情况下使用它带来性能优势的示例。
我还建议阅读 Microsoft 的 DevBlogs 中的这两篇文章:
他们肯定会帮助理解流是如何实现的以及它们在 PowerShell 中是如何工作的。
推荐阅读
- php - Laravel 5.5:如何从中间件和控制器中的 URL 获取参数?
- wordpress - 从存档调用的 CPT 页面上的 Wordpress 上一个和下一个链接
- mongodb - 使用spring boot在mongodb中“更新复杂文档”的正确方法是什么?
- python - 如何让 CMake 编译包含 Boost Local Functions 的源文件
- java - Hibernate - 根据语言从数据库中获取
- java - 当传递一个 id 时,我的视图显示一个奇怪的结果
- .net - 使用 StoreContext 时发布模式下的 .NET Native 序列化异常
- nlp - 我们可以在 Rasa Core Stories 中使用通配符作为插槽值吗?
- java - maven jar 不包括清单中的 main
- vue.js - Vue.Js,我的函数无缘无故被调用了很多次