谁能解释以下两句话之间的区别?

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

  • 我正在使用以下文件作为上述命令的输入。

    input.txt
    1
    2
    

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

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

    我在Google上搜索了该信息,但未找到任何答案。

    编辑1

    命令2的输出不是错误的,当我指定“-ReadCount 2”时,它应该一次传送两行,这意味着foreach循环应仅使用$ [0] = 1重复一次(因为输入仅包含2行) ,$ [1] = 2,所以当我打印“@@” + $ _时,应该像command1一样打印“@@ 1 2”。

    最佳答案

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

    将内容读取为[String]-表示先添加“@@”,然后再添加整个文本文件(foreach循环运行一次)
    (gc -ReadCount 2 .\input.txt)| % {"@@" + $_}
    

    将内容读取为[Array]并评估其每一行,然后在其后添加“@@”和每一行的内容(foreach循环运行两次)
    -ReadCount参数用于将数据作为一个块分割成一行行,主要用于提高性能,因此-ReadCount 3将显示
    @@1 2 3
    @@4 5 6
    @@7
    

    -ReadCount 4将显示:
    @@1 2 3 4
    @@5 6 7
    

    关于powershell - 在PowerShell脚本中使用括号?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34249577/

    10-14 19:13