powershell - 大括号、逗号、参数方法调用

标签 powershell

我发现很难用谷歌搜索 中这两种执行方法调用的区别的答案。 :

$member = "1.2.3.4:567" # IPaddress + port for demonstration
$vals1 = $member.Split(":") # typical .NET way of executing String.Split
$vals2 = $member.Split( (,":") ) # something else which ive seen in examples which I dont understand

在上面,$vals1$vals2 似乎有相同的结果(一个包含 2 个元素的数组)。我通常会使用第一种方式,但在示例中(同时使用 Split 和其他方法调用)我看到使用了第二种方式。

我的问题是第二个不同的是做什么的,使用它有什么我可能不明白的优点吗?


编辑:请不要关注 Split 方法 - 我不是在问 Split 的重载!

最佳答案

comma operator用作一元就是你所看到的。这是创建数组的一种简写方式。 PowerShell 将在通常需要的标准行为的管道中展开数组。我看到这个常用的地方是为了减轻 PowerShell 的那个特性

在某些情况下,虽然您不希望 PowerShell 展开整个数组,但您要做的是通过该数组前面的逗号一元运算符。考虑输出的差异

使用常规数组表示法

$array = 1,2,3
$array.Count
$array | ForEach-Object{$_.GetType().FullName}

3
System.Int32
System.Int32
System.Int32

使用一元运算符创建锯齿状数组

$commaArray = ,@(1,2,3)
$commaArray.Count
$commaArray | ForEach-Object{$_.GetType().FullName}

1
System.Object[]

在第二个示例中,数组作为一个整体传递。 PowerShell 仍然将其从一个包含一个元素的数组展开到该数组 1、2、3。

还有其他的用例。我更常看到使用 1,2,3 静态声明的常规数组,或者有时需要 @(),具体取决于。两者的结果相同。

关于powershell - 大括号、逗号、参数方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39745848/

相关文章:

xml - 如何在 powershell 中使用带有命名空间的 xpath 访问元素?

powershell - 设置 PSake

powershell - 按文件名杀死进程

powershell - 获取已安装的 ISO 并将设备类型更改为客户端

Powershell Invoke-Restmethod 由于 SSL/TLS 安全通道 (Smartsheets API) 而中止

arrays - 如果已存在,则防止将 pscustomobject 添加到数组

powershell - 在PowerShell中将新创建的对象从一个列表添加到另一个列表

通过 Powershell SSH (POSH) 进行 MYSQLDUMP

c# - AppFabric 缓存突然过期

arrays - 不能将成员添加为同名成员存在