2
代碼示例:爲什麼單個元素散列表在PowerShell中表現不同?
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
分配當它看到它作爲一個字符串:
我有一種感覺,這是一個字符串,但如何才能指定者可能返回一個字符串,如果我明確地做$ RET = @() 在裏面? – Eiver
@Eiver ToArray返回一個由1個元素組成的數組,當它被分配給一個以前沒有定義過的變量時,它將取對象的字符串值,而不是數組的自身,所以你最終會得到同樣的結果。 – Richard
奇怪的是,如果我添加[數組]並運行一次腳本並將其刪除,那麼PowerShell ISE將「記住」它是一個數組類型,直到我重新啓動它。非常奇怪和不一致的行爲。 – Eiver