我什么时候可以使用方法和命令行选项?

时间:2016-07-24 06:15:43

标签: powershell

为什么我可以使用split作为方法和命令行开关,而不是join?如何发现对象支持的标志(例如-join)?

> "a,b,c,d" -split ','
a
b
c
d
> "a,b,c,d".split(',')
a
b
c
d
> "a,b,c,d".split(',').join(';')
Method invocation failed because [System.String] does not contain a method named 'join'.
At line:1 char:1
+ "a,b,c,d".split(',').join(';')
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : MethodNotFound

> "a,b,c,d".split(',') -join ';'
a;b;c;d

2 个答案:

答案 0 :(得分:2)

  

为什么我可以使用split作为方法和命令行开关,但不能加入?

由于String个对象的方法为Split(),但arrays没有方法Join(),而-split和{{1}由PowerShell提供operators

-join类确实有一个(静态)String方法补充Join()。你这样使用它:

Split()

您可以做的另一件事是将output field separator[String]::Join(',', ("a,b,c,d" -split ',')) )设置为分隔符并将数组嵌入字符串中:

$OFS
BTW,-splitSplit()不会以同样的方式工作,所以不要混淆他们。前者使用正则表达式,后者使用字符数组。

PS C:\> 'a  b' -split '\s+'
a
b
PS C:\> 'a  b'.Split('\s+')
a  b
PS C:\> 'a,b;c' -split (',', ';')
Cannot convert value ";" to type "System.Int32". Error: "Input string was not in
a correct format."
At line:1 char:9
+ 'a,b;c' -split (',', ';')
+         ~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], RuntimeException
    + FullyQualifiedErrorId : RuntimeException

PS C:\> 'a,b;c'.Split((',', ';'))
a
b
c
  

如何发现对象支持的标志(例如-join)?

阅读documentation$OFS = ',' "$("a,b,c,d" -split ',')" 不是方法,标志或命令行切换。它是PowerShell operator

答案 1 :(得分:1)

如果你愿意的话:

"String" | Get-Member

您将看到没有Join方法可用,只有Split()。

您可以使用-Join运算符代替-Split以及

在您的示例中:

"a,b,c,d".split(',') -join ";"

或使用:[string]::Join()