我发现很难用谷歌搜索 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/