【问题标题】:Should I use colons for all arguments of a function/script call?我应该对函数/脚本调用的所有参数使用冒号吗?
【发布时间】:2014-12-27 18:50:04
【问题描述】:

我最近开始使用 PowerShell,并注意到我可以使用参数名称和值之间的空格或使用冒号来传递参数值,如下所示:

MyFunction -Parameter value
or
MyFunction -Parameter:value

我开始使用冒号是因为它更多地区分了行(出于可读性原因),但据我所见,大多数人不使用它。

我也读过一些关于differences between these approaches when working with switch typed arguments 的内容,通常不需要值。在这种情况下,需要使用冒号,否则命令将不起作用。这也是我倾向于对每个参数使用冒号的另一个原因,出于一致性原因。

还有什么需要注意的吗?

【问题讨论】:

  • @Matt 这根本不是重复的。我什至在我的 OP 中链接了该帖子。我完全知道为什么在这种情况下使用它,我的问题是我是否应该将它用于所有论点,真的。
  • 我的错是没有点击链接。标题不同。该帖子显示了使用它的唯一真正理由。如果是这样,那将归结为意见问题。必须喜欢没有其他人在这种情况下使用它的答案

标签: powershell parameter-passing


【解决方案1】:

一般来说,当我需要执行一个switch参数设置为false的函数时,我只是省略了switch。这就是开关参数的设计意图。我认为我会在参数中使用冒号的唯一一次是当我需要以编程方式确定开关的值时。

例如,假设我需要在偶数天获取常规目录列表,并在奇数天获取递归目录列表:

Get-ChildItem -Path $Path -Recurse:$((Get-Date).Day % 2 -eq 1) | ForEach-Object {...}

除此之外,我个人不会打扰冒号,除非它显着增加了给定语句的可读性。这不是一种常用的语法,所以以后阅读您的代码的人更容易被它弄糊涂。

【讨论】:

  • "当我需要执行一个 switch 参数设置为 false 的函数时,我只是省略了 switch" 回想另一个“程序化”用例:如果你是从另一个函数调用一个带有开关参数的函数,其中预期的开关值在一个变量中。现在你使用:。即,如果func1 有一个开关参数$debug & func2 有一个开关参数$debug,&func1 调用func2(& 想要传递相同的@987654329 @value),您必须致电func2 -debug:$debug。然后你在 OP 领域,我也倾向于 : 无处不在(至少在功能上)。 YMMV
【解决方案2】:

一般来说,我会去掉冒号。仅在设置开关参数的情况下使用(通常是当您要向其传递变量时,例如-Verbose:$someVariable

基本上,我认为您应该与更被接受的风格保持一致,这就是我所描述的。

如果您真的想以内部一致的方式设置所有参数,允许开关参数的变量,并且是一种可接受的(虽然鲜为人知)传递参数的方式,请考虑 splatting 像这样:

$params = @{
    'Param1' = $value1
    'Param2' = 5
    'WhatIf' = $true
}

Some-Cmdlet @params

【讨论】:

    猜你喜欢
    • 2012-05-20
    • 2020-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-31
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    相关资源
    最近更新 更多