在PowerShell脚本中使用括号?

时间:2015-12-13 09:14:08

标签: powershell grouping parentheses

任何人都可以解释下面两个陈述之间的区别吗?

  1. gc -ReadCount 2 .\input.txt| % {"@@" + $_}
  2. (gc -ReadCount 2 .\input.txt)| % {"@@" + $_}
  3. 我使用下面的文件作为上述命令的输入。

    input.txt中

    1
    2
    

    输出

    gc -ReadCount 2 .\input.txt| % {"@@" + $_}

    @@ 1 2

    (gc -ReadCount 2 .\input.txt)| % {"@@" + $_}

    1 @@
    @@ 2

    如果输入文件包含两个以上的记录,则它们都提供相同的输出。 我可以修改我的代码以实现我想要的但我只是想知道为什么这两个提供不同的输出。

    我用Google搜索了相关信息,但未找到任何答案。

    修改1

    命令2的输出不是错误的,当我指定“-ReadCount 2”时,它应该一次管道两行,这意味着foreach循环应该只迭代一次(因为输入只包含2行)和$ [0] = 1,$ [1] = 2这样当我打印“@@”+ $ _时,它应该像command1那样打印“@@ 1 2”。

2 个答案:

答案 0 :(得分:2)

gc -ReadCount 2 .\input.txt| % {"@@" + $_}

将内容读作[String] - 这意味着它添加了" @@"然后是整个文本文件(foreach循环运行一次)

(gc -ReadCount 2 .\input.txt)| % {"@@" + $_}

将内容读作[数组]并评估它的每一行,这增加了" @@"以及它之后每行的内容(foreach循环运行两次)

-ReadCount参数用于将数据拆分为一个行数组,主要用于性能,因此-ReadCount 3将显示

@@1 2 3
@@4 5 6
@@7

-ReadCount 4会显示:

@@1 2 3 4
@@5 6 7

答案 1 :(得分:0)

每个人都可以看到,这是Get-Help Get-Content -Parameter ReadCount的输出:

-ReadCount <Int64>
    Specifies how many lines of content are sent through the pipeline at a time.
    The default value is 1. A value of 0 (zero) sends all of the content at one time.

这就是将行分成组(我假设它会限制文件中读取的行数)。

仍然没有关于少于三行行为的线索。