为什么在PowerShell中通过管道传输到%{0}?

时间:2018-06-24 07:09:50

标签: powershell

PowerShell脚本有时通过管道传输到%{0}:

[byte[]]$bytes = 0..65535 | %{0};

我知道%是ForEach-Object的别名,$ _代表当前的管道对象。

这仅仅是为了避免输出吗?没有更聪明的方法吗?

1 个答案:

答案 0 :(得分:2)

右侧的管道仅输出整数0 65536次-将其转换为byte[]时会产生一个长度为65536的字节数组,且所有值均初始化为0

您也可以这样做:

[byte[]]$bytes = ,0 * 65536

PetSerAl hints at一样,这是不必要的,因为数值类型的数组无论如何都会将所有项初始化为0,这意味着只需创建一个新数组即可,

# using the new constructor keyword, PowerShell version > 5, 
[byte[]]$bytes = [byte[]]::new(65536)
# using New-Object, PowerShell version > 2
[byte[]]$bytes = New-Object 'byte[]' 65536

还会给您完全相同的结果