【问题标题】:Why @($null) is $false, but @($null, $null) is $true?为什么@($null) 是$false,而@($null, $null) 是$true?
【发布时间】:2009-04-24 13:36:49
【问题描述】:

很好奇,这背后的想法是什么:

@() -as [bool]
# False

@($null) -as [bool] 
# False

@($null, $null) -as [bool]
# True

我希望是 False/True/True 或 False/False/False,但不是 False/False/True。

【问题讨论】:

    标签: arrays powershell


    【解决方案1】:

    如 Powershell 快速参考中所述¹:

    真假 ~~~~ ~~~~~~ $真 $假 任何长度 > 0 的字符串,除了单词“false” 空字符串或字符串“false” 任意数≠0任意数=0 长度 > 1 的数组 长度为 0 的数组 元素为真的长度为 1 的数组 元素为假的长度为 1 的数组 对任何对象 Null 的引用

    我认为其背后的想法是,如果将 cmdlet/函数的输出放入数组中,则很容易出现只有一个元素 $false 的数组。您可能期望更多的值,但由于一些错误导致它返回 $false,但在这种情况下,数组中出现两次 $false 的可能性不大。

    或者我们应该等待 Jeffrey Snover 在这里回答:-)

    ¹ 我的机器上的 C:\Windows\System32\WindowsPowerShell\v1.0\Documents\en-US\QuadFold.rtf

    【讨论】:

    • 引用正确,但是这种行为背后的想法是什么?能举个例子吗?
    • 是我迄今为止没有遇到的一个用例。我无法举出一个令人信服的例子,对不起。我最近在 PS 中所做的大部分事情都是解决 Project Euler 问题,而这几乎不是该语言的正确领域 :-) 但我会考虑一下,也许我会找到一个令人信服的例子。
    • 这个引用产生了一个新问题......“空字符串或字符串“false””但我看到 True 正在尝试“false”-as [bool]。还有一个小错字“长度 > 0 的数组”,它应该是“长度 > 1 的数组”,正如我在 .rtf 中看到的那样。
    • 这里的行为与 alex2k8 相同,使用 V2 CTP3...也许数组背后的想法是在使用 @() 运算符时简化事情(即,在以下情况下获得更直接的结果/提示cmdlet 对数组的响应),但这种解释看起来很肤浅;o)
    • 嗯,对,这里在 V2 CTP3 中看到了相同的内容。也许他们改变了那一点;目前无权访问 V1。
    猜你喜欢
    • 2015-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多