gpt4 book ai didi

Powershell 的 -split 根据方法参数的不同而表现不同

转载 作者:行者123 更新时间:2023-12-04 01:14:48 24 4
gpt4 key购买 nike

如果拆分字符串,则会得到字符串[]

$foo = "apple,banana,coconut"
Write-Output $foo.GetType()

$foo = $foo -split ","
Write-Output $foo.GetType()

如果拆分参数化字符串,您将得到一个字符串

Function Get-Foo() {
param (
[string] $foo
)

Write-Output $foo.GetType()

$foo = $foo -split ","
Write-Output $foo.GetType()
}

为什么?

我对此进行了研究,但没有发现任何结果; Powershell 的文档 on split基本上没有帮助。

最佳答案

不同之处在于,在第一个示例中,您从未声明该变量,因此您可以为其分配任何类型的值,并且它将在不强制的情况下接受它们,并更改其类型以匹配:

PS > $foo = "apple,banana,coconut"
PS > Write-Output $foo.GetType().Name
String
PS > $foo = $foo -split ","
PS > Write-Output $foo.GetType().Name
String[]
PS > $foo = 1
PS > Write-Output $foo.GetType().Name
Int32

但是一旦您使用 [string] 显式声明 $foo 的类型,$foo.GetType() 将继续报告 string,并且您分配给它的任何内容都将被强制为 string。您不能仅通过为声明的变量分配新值来更改其类型:

PS > [string] $foo = "apple,banana,coconut"
PS > Write-Output $foo.GetType().Name
String
PS > $foo = $foo -split ","
PS > Write-Output $foo.GetType().Name
String
PS > $foo = 1
PS > Write-Output $foo.GetType().Name
String

不过,您可以通过重新声明来更改类型。即使在函数内:

PS > [Int32] $foo = $foo
PS > Write-Output $foo.GetType().Name
Int32

请注意,如果该值无法解释为新类型,则此类重新声明分配将会失败:

PS > [string] $foo = "apple,banana,coconut"
PS > [Int32] $foo = $foo
Cannot convert value "apple,banana,coconut" to type "System.Int32". Error: "Input string was not in a correct format."

据我所知,没有办法“取消声明”变量的类型,因此它会返回接受任何类型的值,而不是使用 Remove-Variable 完全删除变量。 .

关于Powershell 的 -split 根据方法参数的不同而表现不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59615208/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com