在PowerShell脚本中使用括号?
有谁能解释一下下面两种说法的区别吗在PowerShell脚本中使用括号?,powershell,grouping,parentheses,Powershell,Grouping,Parentheses,有谁能解释一下下面两种说法的区别吗 gc-ReadCount 2。\input.txt |%{“@”+$} (gc-ReadCount 2.\input.txt)|%{“@”+$} 我使用下面的文件作为上述命令的输入 input.txt 1 2 输出 1 2 gc-ReadCount 2。\input.txt |%{“@”+$} @@十二, (gc-ReadCount 2.\input.txt)|%{“@”+$} @@1 @@二, 如果输入文件包含2条以上的记录,则两条记录的输出相同。 我可
gc-ReadCount 2。\input.txt |%{“@”+$}
(gc-ReadCount 2.\input.txt)|%{“@”+$}
1
2
输出
1
2
gc-ReadCount 2。\input.txt |%{“@”+$}
@@十二,
(gc-ReadCount 2.\input.txt)|%{“@”+$}
@@1@@二, 如果输入文件包含2条以上的记录,则两条记录的输出相同。 我可以修改我的代码,以实现我想要的,但我只是想知道为什么这两个不同的输出 我在谷歌上搜索信息,但没有找到任何答案 编辑1 命令2的输出不是错误的吗?当我指定“-ReadCount 2”时,它应该一次传输两行,这意味着foreach循环应该只迭代一次(因为输入只包含两行),并且$[0]=1,$[1]=2,这样当我打印“@@”+$\u时,它应该像command1一样打印“@@1 2”
gc -ReadCount 2 .\input.txt| % {"@@" + $_}
将内容读取为[String]——这意味着它会在其后面添加“@@”,然后添加整个文本文件(foreach循环运行一次)
以[Array]的形式读取内容并计算每一行,这会在每一行之后添加“@@”和每一行的内容(foreach循环运行两次)
-ReadCount
参数用于将数据拆分为一个行数组作为一个块,主要用于性能,因此将显示-ReadCount 3
@@1 2 3
@@4 5 6
@@7
和-ReadCount 4
将显示:
@@1 2 3 4
@@5 6 7
下面是
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.
-ReadCount
指定一次通过管道发送的内容行数。
默认值为1。值0(零)一次发送所有内容。
这就是将行分成多个组的原因(我假设它会限制文件中读取的行数)
但是仍然没有关于少于三行的行为的线索。关于
-ReadCount
我仍然不理解,因为当您删除它时,两个示例的行为都是相同的。@Avshalom,当输入文件包含两行以上的行时,两行都给出相同的输出,这怎么可能呢?假设文件包含4行,则这两个命令都将它们分成两组,并将@1 2@@3 4作为output@Avshalom,您是说第一个命令将始终以单个字符串的形式将整个文件传输到循环中,但当输入中有4行时,它将它们分成两组,并以@1 2、@@3 4的形式输出(在下一行)。唯一的问题是命令2有两行输入。2是有效的-ReadCount
的最小整数值是,但为什么它的行为会根据输入文件中的行数而有所不同?每个块必须至少有两行,因此如果只有两行文本,则只有一个块,除非使用@()
管道中的单个对象未包装到数组中。因此,当input.txt
只有两行时,您将得到字符串数组,而不是字符串数组数组。