【发布时间】:2020-05-31 07:58:49
【问题描述】:
我很难理解以下函数的输出
function testApp
{
param(
[string] $appName,
[switch] $sw = $false,
[string[]] $test,
[string[]] $test2
)
Write-Host $appName - $sw - $test - $test2
}
- testApp -appName "TestApp" -sw $true -test "one", "two" -test2 "three","four"
输出:TestApp - True - 一二 - 三四
- testApp -appName "TestApp" -sw $true -test "one", "two"
输出:TestApp - True - 一二 - True
第一个输出符合预期。但是当我没有通过它时,我无法理解为什么 test2 数组的第二个输出为“True”。谁能帮我理解这种行为的原因?谢谢。
【问题讨论】:
-
请格式化您的代码。现在它几乎不可读。操作方法链接在您创建问题的页面上。
-
出现
True的原因是您误用了[switch]参数。 [grin] 当您添加-sw $True时,您将sw翻转为 TRUE [默认情况下为 FALSE] 并且您发送的值未分配给任何内容。由于在第二个示例中您没有直接为$Test2分配任何内容,因此剩余的$True被传递给剩余的参数 --Test2参数。 -
是的,当使用 [switch] 时,您没有给它一个默认值。如果在调用中指定,它将测试 $true,如果未指定,它将测试 $false。当我第一次编写函数时,我很难理解这一点。
-
要添加到其他 cmets,如果您想为开关参数指定一个值,您可以这样做:“-sw:$true” - 即“连字符开关名称 冒号 值”。此语法不同于使用空格分隔参数名称和值的非开关参数,如果您的开关值来自变量 - 例如“-sw:$myVar”。
标签: powershell