【发布时间】:2020-10-22 03:45:14
【问题描述】:
今天我发现了非常奇怪的行为,对我来说没有任何逻辑。在我的一台机器上,这段代码按我的预期工作,但在另外两台机器上我重现了
function Set-XXX {param([String] $variableName)
[string]$vw;
$vw = $variableName;
return $vw;
}
当我执行这个函数时,我得到了 Object[] 的奇怪结果,而不是我预期的 string。
PS C:\Users\Robert> $ve = Set-XXX -variableName "eeee"
PS C:\Users\Robert> $ve.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
PS C:\Users\Robert> $ve[0]
PS C:\Users\Robert> $ve[1]
eeee
当我用空字符串设置$vw 时:[string]$vw = '' 结果类型是string 并且没有问题。谁能解释一下为什么会这样?
PS C:\Users\Robert> function Set-XXX {param([String] $variableName)
>> [string]$vw= '';
>> $vw = $variableName;
>> return $vw;
>> }
PS C:\Users\Robert> $vex = Set-XXX -variableName "eeee"
PS C:\Users\Robert> $vex
eeee
PS C:\Users\Robert> $vex.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String System.Object
PS C:\Users\Robert> $PSVersionTable
Name Value
---- -----
PSVersion 5.1.19041.546
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.19041.546
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
为什么 Powershell 不尊重变量声明 [string] 并试图返回 Object[] ?
【问题讨论】:
-
PowerShell 不像许多其他语言那样具有变量 declarations,因此:
[string]$vw,被视为强制转换操作 - 如果 @987654332 将返回一个空字符串@ 尚未分配