代码示例:
function ToArray([hashtable] $hashTable){
$ret = @()
foreach($key in $hashTable.Keys){
$ret += ("`"" + $key + ":" + $hashTable[$key] + "`"")
}
$ret
}
$h1 = @{
key1 = "value1" # Only one key in this one
}
$h2 = @{
key2 = "value2"
key3 = "value3"
}
$h3 = @{
key4 = "value4"
key5 = "value5"
}
$test1 = ToArray $h1
$test1 += ToArray $h3
$test2 = ToArray $h2
$test2 += ToArray $h3
Write-Host
Write-Host "TEST 1:" $test1
Write-Host "TEST 2:" $test2
输出:
TEST 1: "key1:value1""key5:value5" "key4:value4"
TEST 2: "key3:value3" "key2:value2" "key5:value5" "key4:value4"
问题: 为什么 TEST 1 中缺少空格?
最佳答案
在脚本末尾运行以下命令:
PS Y:\> $test1.GetType()
PS Y:\> $test2.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String System.Object
True True Object[]
一个是 String
类型,另一个是 Object Array
类型,当您有单个元素哈希表时,PowerShell
将其视为单个将其分配给变量时的字符串。
PS Y:\> $test1 = ToArray $h1
PS Y:\> $test1.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String System.Object
所以 PowerShell
然后会在使用 +=
时将 $h3
中的所有元素连接成一个大字符串,因为您要添加一个 Array
到 String
。
而 $test2
向您添加一个 Array
和 Array
意味着您将看到输出作为一个更大的数组输出。
要解决这个问题,请显式定义 $test1
的类型和数组:
[array]$test1 = $h1
关于powershell - 为什么单元素哈希表在 powershell 中的行为不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39119792/