【问题标题】:Switch Parameter overwrites a different parameter [duplicate]切换参数覆盖不同的参数[重复]
【发布时间】:2019-07-21 00:21:29
【问题描述】:

在尝试使用 powershell 时,我发现了这种交互。当有一个包含以下代码的脚本时:

param(
    [switch]$testSwitch = $false,
    [String[]]$names = "ABC","DEF")
echo "names: $names"
echo "test: $testSwitch"

然后使用:

.\testScript.ps1 -testSwitch true

对我来说,预期的回报是名称不变并且 testSwitch 返回 True - 因为这是与输入实际无关的开关的默认值(至少我的理解)。 实际回报为:

names: true
test: True

testSwitch 的值对我来说并不奇怪,但是 names 的值被 testSwitch 中输入的值覆盖了。我正在努力理解为什么会这样。 所以我的问题是,为什么在有命名参数的同时,某个参数的输入值会覆盖一个完全不同的参数?

这似乎只发生在 switch 上,同样的例子是 int32 而不是 switch,输入 1 和默认参数 0,返回预期的结果。

【问题讨论】:

    标签: powershell parameter-passing


    【解决方案1】:

    因为-testSwitch是一个开关参数,如果你指定它之后没有任何值,那么你将它设置为true。

    因为您使用字符串true 作为您尝试为其设置的值,而不是$true,所以它将字符串“true”放入您的其他参数中。

    另外,要将特定值发送到开关参数,您可以在: 之后指定它。这将达到您的预期:

    .\testScript.ps1 -testSwitch:$true
    

    请注意,这仅对开关参数值是必需的(但如前所述,您通常不必指定一个值,因为只需使用它就可以实现)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-21
      • 2011-07-27
      • 2014-01-05
      • 1970-01-01
      • 1970-01-01
      • 2020-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多