【问题标题】:Effect of parens on powershell Get-Content cmdlet括号对 powershell Get-Content cmdlet 的影响
【发布时间】:2013-03-01 15:43:58
【问题描述】:

在 Get-Content cmdlet 周围加上括号有什么作用?为什么我可以使用括号读取和写入同一个文件,但不能没有?

这里是有问题的代码示例。

powershell -command "(Get-Content SomeFile.sql) | ForEach-Object { $_ -replace \"BEFORE\", \"AFTER\" } | Set-Content SomeFile.sql"

默认情况下,Get-Content cmdlet 是否会保留文件句柄直到整个命令执行完毕?

【问题讨论】:

    标签: powershell cmd powershell-2.0


    【解决方案1】:

    Get-Content cmdlet 是否保留了文件句柄

    是的。

    如果没有括号,管道将在每次Get-Content 输出一个对象(即文件中的一行文本)时运行。

    另一方面,Get-Content 将运行到完成,为整个文件创建一个字符串数组,然后为每一行运行管道。

    所以在前一种情况下文件将保持打开状态,而在第二种情况下整个文件被读入内存。

    【讨论】:

    • 感谢您的精彩回答!
    【解决方案2】:

    如果没有括号,Get-Content 会打开文件以供读取,但同时您实际上会尝试写入同一个文件。

    Parens 强制读取操作在进入下一个阶段之前完成,通过管道传递内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-19
      • 2014-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多